我有两个测试他们是完全一样的...除了两件事,他们称之为两个单独的服务电话..因此,当我使用mockito我有两个单独的期望和验证线...
这就是我所做的:
@test
TestA {
baseTest("player");
}
@test
TestB {
baseTest("member");
}
BaseTest(type type) {
....
.....
if type(player) {
Mockito.when(player service call)
}
else {
Mockito.when(member service call)
}
// make the call in code
//verify
if(player) {
verify player specific service call...
}
else {
}
}
我认为以上是一种测试气味......只是感觉不对......
有没有比在我的baste测试中放置If语句更好的方法?
答案 0 :(得分:4)
如果你看到重复的if语句,你可以使用多态。您应该在超类BaseTestSuper中对“播放器服务调用”和“成员服务调用”方法进行抽象,这也将拥有现有的BaseTest方法。
答案 1 :(得分:3)
您应该独立开发测试代码,并在有意义时加入。
以身作则。初始化代码的一条经验法则(Arrange / Act / Assert的第一个A)是:
所以我的结论是:
事实上@artbristol的回答是有道理的:如果你正在使用if的替代行为,请考虑多态性。只是我不确定它在哪个点上测试是否复杂(如果代码测试类似的类层次结构,则可能是有意义的。)
答案 2 :(得分:0)
我仍然只是分别实现2个测试类。代码长度和重复对于测试而言并不重要,代码可读性,彻底性和正确性优先。有鉴于此,只需分别实施2个测试用例。
答案 3 :(得分:0)
通常,您不应该为测试添加任何复杂性。首先,你可以在那里犯错误(即使在简单的ifs中)。其次,您的测试不再是文档,这意味着您无法轻易了解测试类的使用情况和行为。
所以这是一种气味。 :)