我有下面的类
public class Multiplier {
private static Map<Integer, Float> map;
private static final float DEFAULT_MULTIPLIER = 4.4F;
static {
// This map is actually populated by reading from a file. This is an example on how the map looks like.
map = new HashMap<>();
map.put(1, "3.5F");
map.put(2, "5.8F");
map.put(3, "2.7F");
}
public static float getMultiplier(Integer id) {
return map.getOrDefault(id, DEFAULT_MULTIPLIER);
}
}
我想测试getMultiplier方法,最好的方法是什么?
Map中有1000个条目。我应该用几个不同的id调用getMultiplier方法并确保返回的值匹配吗?文件是静态的。它在将来偶尔会改变,但这意味着要更新测试,这很好。
第二,我也想测试默认值,我应该做类似这样的事情吗
Assert.assertEquals(4.4F, Multiplier.getMultiplier(<invalidId/null>));
我将DEFAULT_MULTIPLIER的值硬编码到assertEquals的预期参数中,这有意义吗?
我想知道单元测试这个方法的正确方法是什么?谢谢!
1条答案
按热度按时间bogh5gae1#
你不应该测试任何一个--它有太多的“给你自己的考试打分”的感觉。这里可能的错误包括你搞砸了常量或静态文件,这是测试不太可能捕捉到的。你将为自己设置一系列未来的更新(你更新默认值,然后再去:哦,对了,当然,我在测试中重复了我自己,但我忘了更新那里的值)。你没有测试任何东西--你在给未来的自己做毫无意义的家庭作业。
发挥创造力--什么东西将来可能会失败?不多--这是相当简单的代码。测试可能失败的途径。
如果我是你,我会测试以下情况:
.getMultiplier
方法由于将来的错误而引发异常,或者它返回0而不是实际值。如果您以后更改此默认值,则可以避免更新测试。除非您将其更改为0或更改为“如果您请求未列出的数字的乘数,该方法现在将引发”,这是对功能的根本改变,因此确实会导致测试失败。一旦测试确保了“turn static file into static map”代码可以工作,并且我已经测试了getMultiplier方法不会以两种明显的方式失败(throws,or,return 0),那么您就测试了所有相关的东西。