2009-10-29 79 views
1

我在接管包含一个控制台应用程序项目,该项目运行作为我们的生产服务器调度任务的遗留系统的过程。主要生产每日和每周报告,做一些数据库维护等单元测试Windows计划任务控制台应用程序

的控制台应用程序的“主”手柄输入命令行参数,并确定哪几个不同的程序来执行。喜欢的东西

模块MainModule

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'被称为”?

由于提前,

回答

1

我不知道为什么主不会从测试中可见,除非VB.NET做一些幕后的东西,窗帘来隐藏它。

在任何情况下,为何不动你的代码到自己的类(ES)?然后,您可以一次对每个类运行单元测试,而不是一次执行整个事件。

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

+1

看来,它涉及到的主要在“模块”是代替“类”。项目中其他类中的项目是可见的,在这个主要“模块”中没有任何内容。 我希望避免重构这个非常多,因为它是一个非常明显的生产工作。但是,将主逻辑提取到其自己的类中(以命令行参数作为参数)是可能的。谢谢! – 2009-10-29 14:24:54

+0

很酷。既然这让你朝着正确的方向发展,你会把这个标记为答案吗? (或者至少给我一个upvote?)欣赏它! – 2009-10-30 02:19:45

相关问题