jol*_*ier 3 java junit unit-testing
我正在为我们的主要产品编写单元测试,并且有一个问题:如何区分
对于第一个,我们肯定有jUnit Assert框架,但是对于第二个框架我们有什么?
示例:我的单元测试是测试c()不会抛出MyException,但是为了执行c()我需要首先执行a()然后b(),它们都可以抛出MyException(),所以我会写:
@Test
public void testC() {
a();
Object forC = b();
try {
c(forC);
} catch (MyException e) {
Assert.fail("....");
}
}
Run Code Online (Sandbox Code Playgroud)
但是我需要处理可以被a或b抛出的MyException,并且还要处理forC不应该为null的事实.做这个的最好方式是什么?
你对这个问题的解决方案是什么?我可能会选择第二个,但我对它不满意,如上所述.
单元测试的基石是测试所需的最少代码量,否则它可能会落入您正在寻找端到端功能的集成测试空间.
如果你能证明a()
可以创建并在它自己的测试类测试,而且b()
还可以创建并在它自己的测试类测试,那么它遵循你的测试上面可以忽略的测试a()
和b()
,并改用赢得已知值不要失败.这通常通过使用模拟对象来满足.
使用()和b()创建为模拟对象,c()
可以单独测试.如果您发现无法单独测试c()和()和b(),则表明您的代码需要更改,以便关注点分离.这通常通过将 a()和b()的dependany注入c()来满足.
关于何时在单元测试中使用模拟对象的这篇文章可能有助于更多地阐述这一主题.
归档时间: |
|
查看次数: |
190 次 |
最近记录: |