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

时间:2010-11-17 19:40:24

标签: junit command-line-arguments

所有

我目前正在使用JUnit 4编写测试用例。我对JUnit相当新,发现很难测试我的带有参数的主类。我通过以下方式为JUnit测试类指定了参数:

1>右键单击JUnit测试类
2> Goto Run As - >运行配置
3>选择Arguments选项卡并指定一个值(我输入了一个无效的参数,即主类需要将命令行参数转换为int,并且我传递的String值无法转换为{{1} })

但是,我测试的int类,如果命令行参数无法转换为main,则抛出int。但是,JUnit不会将testMain()方法显示为IllegalArgumentExceptionError。我不认为我的设置适合​​JUnit类。任何人都可以指导我出错的地方

3 个答案:

答案 0 :(得分:2)

要测试您的类main方法,只需编写类似:

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

答案 1 :(得分:1)

将main()方法更改为:

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

将main()中的代码移动到新方法go()。现在,您的测试方法可以执行此操作:

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

答案 2 :(得分: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方法,如

  3. 
    @Test(expected = IllegalArgumentException.class)
    
        public void testBadArgs()
        {
             ArgumentValidator.nullOrEmpty(null);
        }
    
    

    我认为这是一种更好的方法