2010-11-17 74 views
0

全部,将命令行参数传递给Eclipse中的JUnit

我目前使用JUnit 4编写测试用例。我对JUnit相当陌生,发现很难测试带有参数的主类。 >运行配置
3>选择Arguments选项卡,并指定一个值(我已经进入 -

1>右键单击JUnit测试类
2>转到运行方式:我已经通过指定的参数,以我的JUnit测试类无效参数即主类期望的命令行参数被转换为int和我传递),可以不被转换为int字符串值

然而,main类我测试,如果在命令行参数不能转换为int,比我丢IllegalArgumentException。但是,JUnit不会将testMain()方法显示为ErrorFailure。我不认为我的设置适合​​JUnit课程。任何人都可以请指导我在哪里,我错了

回答

2

要测试类主要方法简单地写类似:

@Test(expected = IllegalArgumentException.class) 
public void testMainWithBadCommandLine() 
{ 
    YourClass.main(new String[] { "NaN" }); 
} 
1

更改main()方法,以这样的:

public static void main(String[] args) 
{ 
    MyClass myclass = new MyClass(args); 
    myclass.go(); 
} 

此举是在主代码(),以新的方法去()。现在,您的测试方法可以做到这一点:

public void myClassTest() 
{ 
    String[] args = new String[]{"one", "two"}; //for example 
    MyClass classUnderTest = new MyClass(testArgs); 
    classUnderTest.go(); 
} 
0

首先参数应该在程序参数部分。通常情况下,如果您将应用程序设计为可测试的,则不需要对主要方法的应用程序启动点进行测试。

  1. 重构类

    
    public static class ArgumentValidator 
        { 
         public static boolean nullOrEmpty(String [] args) 
         { 
          if(args == null || args.length == 0) 
          { 
           throw new IllegalArgumentException(msg); 
          } 
          //other methods like numeric validations 
         } 
        } 
    
  2. 现在您可以轻松地测试使用JUnit的nullOrEmpty方法类似


@Test(expected = IllegalArgumentException.class) 

    public void testBadArgs() 
    { 
     ArgumentValidator.nullOrEmpty(null); 
    } 

我认为这是一个更好的办法