【问题标题】:Unit Testing a Windows Scheduled Task Console App对 Windows 计划任务控制台应用程序进行单元测试
【发布时间】:2009-10-29 13:47:15
【问题描述】:

我正在接管一个包含控制台应用项目的遗留系统,该项目在我们的生产服务器上作为计划任务运行。主要制作日报和周报,做一些数据库维护等。

控制台应用程序的“main”处理输入命令行参数并确定要执行几个不同进程中的哪一个。类似的东西

模块主模块

Public Sub Main()
    '--- Check if command line arguments were specified
    Dim args() As String = Environment.GetCommandLineArgs()
    If args.Length > 1 Then
        ConsoleMain(args)
    End If
End Sub

Public Sub ConsoleMain(ByVal args() As String)
    Dim rc As New Coordinator(enableEmails_)

    Try
        Dim arg_ As String = args(1)
        Dim success_ As Boolean = True

        Select Case arg_.ToUpper()
            Case TaskType.OrderIntegration
                success_ = rc.OrderIntegration()
            Case TaskType.Motivators
                success_ = rc.MotivatorsCreateFile(New CustomerMotivatorsManager)

       ... repeat for each of the various "Task Types"

结束模块

我的问题是: - 这是一个带有 Main() 和 ConsoleMain() 的控制台应用程序,我似乎没有可以从测试中访问的任何内容 - 即“Main”和“ConsoleMain”似乎无法访问。我怎样才能对这样的东西进行单元测试,以测试“如果参数'x'被传递,函数'y'被调用”?

提前致谢,

【问题讨论】:

    标签: unit-testing scheduled-tasks


    【解决方案1】:

    我不确定为什么 Main 在您的测试中不可见,除非 VB.NET 做了一些幕后工作来隐藏它。

    无论如何,为什么不将您的代码移到它自己的类中呢?然后,您可以一次针对每个类运行单元测试,而不是一次执行整个测试。

    单元测试通常针对单个类执行,而不是执行应用的 Main 入口点。

    【讨论】:

    • 看来这与 Main 在“模块”而不是“类”中有关。项目中其他类中的项目是可见的,在这个主“模块”中什么都没有。我希望避免重构这个非常多,因为它是一个高度可见的生产工作。但是,将主逻辑提取到自己的类中(将命令行参数作为参数)是可能的。谢谢!
    • 酷。既然这使您朝着正确的方向前进,您是否要将其标记为答案? (或者至少给我一个赞成票?)欣赏它!
    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2021-10-18
    相关资源
    最近更新 更多