Próbuję znaleźć najlepszy sposób na wdrożenie przypadku testowego do ćwiczeń klasowych. Moje ćwiczenie klasowe dostarcza znanego błędu i powinienem napisać przypadek testowy, aby mu się nie udało, a tym samym znaleźć błąd. Wymagało to użycia algorytmu Dijkstra.JUnit Test Case za pomocą metody prywatnej w algorytmie Dijkstra
Jest to poprawna wersja dołączonego kodu:
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;
}
Znany bug w oddzielnej wersji jest następujący:
if (unsettled.contains(i))
{
if (distances[i] > min)
{
min = distances[i];
node = i;
}
}
i tutaj jest przypadek test JUnit używam znaleźć to. Próbuję uzyskać dostęp do tej metody za pomocą Java Reflection, a następnie próbuję stwierdzić, czy węzeł zwrócony jest równy węzłowi, tak naprawdę jest większą odległością.
Oto mój przypadek testowy:
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);
*/
Kiedy wykonać test, to nie wydaje się zrobić wszystko jak mam żadnego wyjścia. Czuję, że to przemyślam. Czy istnieje łatwiejszy sposób na znalezienie tego błędu bez użycia refleksji java?
Musisz zweryfikować wartość zwracaną przez d1.dijkstra_algorithm (sąsiedztwo, 1). Na przykład. assertEquals (expectedValue, d1.dijkstra_algorithm (adjacency, 1)) –
Na czym polega problem? Że twój test nie działa? Lub, że twój test działa, ale jest bardzo złożony i powinien być rozwiązany w prostszy sposób? – CoronA