所有
我目前正在使用JUnit 4编写测试用例。我对JUnit相当新,发现很难测试我的带有参数的主类。我通过以下方式为JUnit测试类指定了参数:
1>右键单击JUnit测试类
2> Goto Run As - >运行配置
3>选择Arguments选项卡并指定一个值(我输入了一个无效的参数,即主类需要将命令行参数转换为int
,并且我传递的String值无法转换为{{1} })
但是,我测试的int
类,如果命令行参数无法转换为main
,则抛出int
。但是,JUnit不会将testMain()方法显示为IllegalArgumentException
或Error
。我不认为我的设置适合JUnit类。任何人都可以指导我出错的地方
答案 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)
首先,参数应该在程序参数部分。通常,如果您将应用程序设计为可测试,则不需要测试作为主要方法的应用程序的启动点。
重构课程
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
}
}
您现在可以使用junit轻松测试nullOrEmpty方法,如
@Test(expected = IllegalArgumentException.class)
public void testBadArgs()
{
ArgumentValidator.nullOrEmpty(null);
}
我认为这是一种更好的方法