Dav*_*veM 1 java junit exception
我遇到了测试用例的问题.
正在测试的方法有一个try/catch,它可以捕获MalformedURLException但是在测试期间,由于需要MalformedURLException的Junit AssertionError而导致失败.但我无法找出实际投掷的内容!这是我的代码(在eclipse中创建为MWE).
我想测试的方法
public void throwMalFormedURLException(){
String s = new String("www.google.com");
try{
url = new URL(s);
}catch (Exception e){
e.printStackTrace();
e.getClass();
e.getCause();
}
}
Run Code Online (Sandbox Code Playgroud)
测试方法
@Test (expected = MalformedURLException.class)
public void testThrowMalFormedURLException() {
MWE testClass = new MWE();
testClass.throwMalFormedURLException();
System.out.println("End of test");
}
Run Code Online (Sandbox Code Playgroud)
这是控制台中的输出
测试结束错误的详细信息如下:java.net.MalformedURLException:无协议:www.google.com
at java.net.URL.(URL.java:593)
at java.net.URL.(URL.java:490)
at java.net.URL.(URL.java:439)
在MWE.throwMalFormedURLException(MWE.java:12)
的testMWE.testThrowMalFormedURLException(testMWE.java:12)
在Junit控制台中,它说:
java.lang.AssertionError:预期的异常:Java.net.MalformedURLException
但Junit报告失败,即使控制台告诉我我有一个MalformedURLException.
我在这次测试中做错了什么?
谢谢你的想法.
大卫
您正在捕获异常,因此它不会被抛出.
如果您的目的是测试您是否正在捕获异常并将其正确地转发回"用户",那么您应该专门为此创建测试.您可能不希望单元测试中的UI元素*因此这是一个抽象和DI有很多价值的地方.一种简单的方法是创建一个模拟对象,该对象将侦听错误消息并在收到消息时标记标记.单元测试会触发错误,然后在标志设置后通过.您还应该进行否定测试或断言在抛出异常之前未设置该标志.
*测试UI也是一个好主意,但它可能有点慢.有各种自动化工具.它通常属于不同的测试阶段.您真的希望单元测试非常快,以便您可以非常频繁地运行它们.
| 归档时间: |
|
| 查看次数: |
6131 次 |
| 最近记录: |