Java 测试检查布尔表达式的方法时的Junit模式
我想知道测试只检查布尔表达式的方法的最佳方法是什么 例如,我想测试这个方法:Java 测试检查布尔表达式的方法时的Junit模式,java,junit,Java,Junit,我想知道测试只检查布尔表达式的方法的最佳方法是什么 例如,我想测试这个方法: boolean canDoSomething( Account account, User user ) { return ( account.isAck() && account.getEmail() != null && account.getName().equals( user.getProvider()
boolean canDoSomething( Account account, User user )
{
return ( account.isAck()
&& account.getEmail() != null
&& account.getName().equals( user.getProvider() );
}
我是否必须为每个布尔组合编写junit方法?例如当不确认时不确认时()
,当不确认时不确认时()
我觉得这有点难看,所以我想知道是否有更好的方法来做到这一点。一如既往,测试直到恐惧变成厌倦。也许你不需要所有八种可能的组合——也许你可以尝试四种:一种是所有条件都有效的组合,然后在其他测试中使一个条件为假 有些人会因为我这么说而把我烧死,但你可能会把它表示为一个阳性测试和一个阴性测试:
public void testCanDoSomething_allValid() {
assert.isTrue(foo.canDoSomething(new Account(true, "x@y.z", "Fred"),
new User("Fred")));
}
public void testCanDoSomething_negative() {
assert.isFalse(foo.canDoSomething(new Account(false, "x@y.z", "Fred"),
new User("Fred")));
assert.isFalse(foo.canDoSomething(new Account(true, null, "Fred"),
new User("Fred")));
assert.isFalse(foo.canDoSomething(new Account(true, "x@y.z", "Ginger"),
new User("Fred")));
}
虽然“在每个测试中只测试一条路径”有明确的理由,但我发现这样的分组非常简单的测试有时会导致更简单的测试可读性。当然,当你的测试开始做更复杂的事情时,你应该把它们分解出来
(也有可能,如代码>用户<代码>或<代码>帐户<代码>为空,或用户名为空等,您可能需要考虑。)
,直到恐惧变成无聊。也许你不需要所有八种可能的组合——也许你可以尝试四种:一种是所有条件都有效的组合,然后在其他测试中使一个条件为假
有些人会因为我这么说而把我烧死,但你可能会把它表示为一个阳性测试和一个阴性测试:public void testCanDoSomething_allValid() {
assert.isTrue(foo.canDoSomething(new Account(true, "x@y.z", "Fred"),
new User("Fred")));
}
public void testCanDoSomething_negative() {
assert.isFalse(foo.canDoSomething(new Account(false, "x@y.z", "Fred"),
new User("Fred")));
assert.isFalse(foo.canDoSomething(new Account(true, null, "Fred"),
new User("Fred")));
assert.isFalse(foo.canDoSomething(new Account(true, "x@y.z", "Ginger"),
new User("Fred")));
}
虽然“在每个测试中只测试一条路径”有明确的理由,但我发现这样的分组非常简单的测试有时会导致更简单的测试可读性。当然,当你的测试开始做更复杂的事情时,你应该把它们分解出来
(也存在诸如代码>用户<代码>或<代码>帐户<代码>为空,或者用户名为NULL等,您可能需要考虑。)
< P>完全测试该方法意味着测试表达式中的每个布尔组合。您可能并不总是需要这个:测试,直到您确信所有可能的故障选项都已涵盖 您应该至少在每个条件为false,而其他条件为true的情况下进行测试,以验证只有在满足所有条件时返回值才为true。即- 测试用例1:A为假,B为真,C为真->结果应为假
- 测试用例2:A真、B假、C真->结果应该是假
- 测试用例3:A真、B真、C假->结果应该为假
- 测试用例4:A真、B真、C真->结果应为真
- 测试用例1:A为假,B为真,C为真->结果应为假
- 测试用例2:A真、B假、C真->结果应该是假
- 测试用例3:A真、B真、C假->结果应该为假
- 测试用例4:A真、B真、C真->结果应为真
测试,直到恐惧变成无聊
爱它。关于你的建议,它让我更接近无聊的一面:)我的第一个评论是针对你答案的第一行。既然你编辑了它,我认为它是一个优雅的解决方案,一点也不无聊。测试直到恐惧变成无聊。
喜欢它。关于你的建议,它让我更接近无聊的一面:)我的第一个评论是针对你答案的第一行。既然你编辑了它,我认为这是一个优雅的解决方案,一点也不无聊。您实现的测试用例(方法)越多,就越容易发现问题。如果我们在一个测试用例中使用了太多的断言,那么我们最终会调试测试,看看它失败的原因。感谢我开始这么做,但我认为对于这样一个简单的方法来说这有点太多了。最后我选择了你的解决方案,因为它将更多地提高我在Jenkins CI游戏:PAgreed上的分数。您实现的测试用例(方法)越多,就越容易发现问题。如果我们在一个测试用例中使用了太多的断言,那么我们最终会调试测试,看看失败的原因。感谢我开始这么做,但我认为对于这样一个简单的方法来说有点太多了。最后,我选择了你的解决方案,因为它将更大程度地提高我在Jenkins CI游戏中的分数:P