Java Dijkstra算法中基于私有方法的JUnit测试用例
我正试图找出实现课堂练习测试用例的最佳方法。我的类练习提供了已知的bug,因此我应该为它编写一个失败的测试用例,从而找到bug。它涉及使用Dijkstra算法 这是所提供代码的正确版本:Java Dijkstra算法中基于私有方法的JUnit测试用例,java,bash,reflection,junit,dijkstra,Java,Bash,Reflection,Junit,Dijkstra,我正试图找出实现课堂练习测试用例的最佳方法。我的类练习提供了已知的bug,因此我应该为它编写一个失败的测试用例,从而找到bug。它涉及使用Dijkstra算法 这是所提供代码的正确版本: private int getNodeWithMinimumDistanceFromUnsettled() { int min; int node = 0; Iterator<Integer> iterator = unsettled.iterator(); nod
private int getNodeWithMinimumDistanceFromUnsettled()
{
int min;
int node = 0;
Iterator<Integer> iterator = unsettled.iterator();
node = iterator.next();
min = distances[node];
for (int i = 1; i <= number_of_nodes; i++)
{
if (unsettled.contains(i))
{
if (distances[i] <= min)
{
min = distances[i];
node = i;
}
}
}
return node;
}
这是我用来查找它的JUnit测试用例。我尝试使用Java反射访问这个方法,然后尝试断言返回的节点是否等于实际距离较大的节点
以下是我的测试用例:
int[][] adjacency = { { 0, 0, 0, 0, 0 },
{ 0, 0, 9, 10, 0 },
{ 0, 9, 0, 0, 0 },
{ 0, 5, 4, 0, 2 },
{ 0, 5, 4, 3, 0 },
};
Dijkstra d1 = new Dijkstra(4);
d1.dijkstra_algorithm(adjacency, 1);
/*
try {
nodeMethod = Dijkstra.class.getDeclaredMethod("getNodeWithMinimumDistanceFromUnsettled");
} catch (NoSuchMethodException e) {
System.out.println(e.getMessage());
}
nodeMethod.setAccessible(true);
try {
node = (int) nodeMethod.invoke(d1);
System.out.println("min node is: " + node);
} catch (IllegalAccessException | InvocationTargetException e) {
System.out.println(e.getMessage());
}
assertEquals(node, 0);
*/
当我运行测试时,它似乎没有做任何事情,因为我没有得到任何输出。我觉得我想得太多了。有没有一种不使用java反射就可以更容易地找到这个bug的方法?既然您将它标记为,我将以实物形式回答。您不应该单元测试私有方法,应该测试使用私有方法的公共(或受保护)方法。因此:
@Test
public void testDijkstra()
{
Dijkstra d1 = new Dijkstra(4);
assertThat( "should be <what you expect>" ,
d1.dijkstra_algorithm(adjacency, 1) ,
equalTo( 42 /* <-- expected result goes here*/ ) );
}
@测试
公共无效测试dijkstra()
{
Dijkstra d1=新Dijkstra(4);
断言(“应该”,
d1.dijkstra_算法(邻接,1),
equalTo(42/*您必须验证d1.dijkstra_算法(邻接,1)的返回值。例如assertEquals(expectedValue,d1.dijkstra_算法(邻接,1))问题是什么?您的测试不起作用?或者您的测试确实起作用,但非常复杂,应该以更简单的方式解决?
@Test
public void testDijkstra()
{
Dijkstra d1 = new Dijkstra(4);
assertThat( "should be <what you expect>" ,
d1.dijkstra_algorithm(adjacency, 1) ,
equalTo( 42 /* <-- expected result goes here*/ ) );
}