无论参数顺序如何,我都想正确验证一个方法。
因此,片段 1 和片段 2 都应该通过片段 3 中的测试用例。
(片段 1)
public Integer compute_speed(Integer distance, Integer time) {
return distance/time;
}
(片段 2)
public Integer compute_speed(Integer time, Integer distance) {
return distance/time;
}
您可以将这两个片段假设为两个学生提交的不同代码。并且你可以假设参数的数量可以大到 10。
在测试用例中,我这样写,
(片段 3)
return compute_speed(3, 1).equals(3);
这验证了代码片段 1,但验证了代码片段 2。我怎样才能使这两个代码片段都通过测试用例?
要是有这样的东西就好了
return compute_speed(distance = 3, time = 1).equals(3);
提前致谢...
最佳答案
更简洁的方法是使用 Integer computeSpeed(Integer time, Integer distance);
方法创建接口(interface):
public interface DistanceCalculator {
Integer computeSpeed(Integer distance, Integer time);
}
然后您要求学生实现它并调用他们的实现 StudentNameDistanceCalculator。例如,您将从学生那里收到以下类(class):
public class AssyliasDistanceCalculator implements DistanceCalculator {
public Integer computeSpeed(Integer distance, Integer time) {
return distance / time;
}
}
public class BobDistanceCalculator implements DistanceCalculator {
public Integer computeSpeed(Integer distance, Integer time) {
return distance / time * 2;
}
}
然后您可以将他们所有的类加载到一个项目中并同时测试所有类。以 TestNg 为例:
@Test(dataProvider = "students")
public void testMethod(Class<?> clazz) throws Exception {
DistanceCalculator dc = (DistanceCalculator) clazz.newInstance();
assertEquals(dc.computeSpeed(3, 1), (Integer) 3,
clazz.getSimpleName().replace("DistanceCalculator", "") + " failed");
}
@DataProvider(name = "students")
public Object[][] dataProvider() {
return new Object[][]{
{AssyliasDistanceCalculator.class},
{BobDistanceCalculator.class}};
}
你会得到一份关于谁没有通过测试的详细报告:
关于Java:不同参数顺序的测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21120003/