Как я могу написать правильный тест JUnit для этого кода?
Я новичок в программировании. Я должен написать тест JUnit для этой программы, чтобы найти GCD, показанный здесь:
public class CoprimeNumbersTest {
/**
* Given two integers, this returns true if they are relatively prime and false if they are not. Based upon the first
* webpage I found ({@link "https://primes.utm.edu/notes/faq/negative_primes.html"}), the primality of negative
* numbers is up for debate. This method will not treat negatives differently.
*
* @param a First integer to be tested
* @param b Second integer to be tested
* @return True when the greatest common divisor of these numbers is 1; false otherwise.
*/
public boolean isCoprime(int a, int b) {
// Continue using Euclid's algorithm until we find a common divisor
while (b != 0) {
// Remember b's value
int temp = b;
// Set b to the remainder of dividing a by b (e.g., a mod b).
b = a % b;
// Set a equal to b's old value.
a = temp;
}
// The gcd is the value in a. If this is 1 the numbers are coprime.
if (a == 1) {
return true;
}
// When they are not 1, they have a common divisor.
else {
return false;
}
}
}
Вот что я мог придумать:
public class CoPrimetest {
@Test
public void testing() {
assetEquals(1, GCDFinder.CoprimeNumbersTest);
}
}
Есть ли какие-то подходы, которые мне не хватает, которые могут помочь улучшить мой код?
2 ответа
Вы должны на самом деле вызвать свой метод, как в обычном коде. (Следующий код не проверен, я не знаю, действительно ли 1 и 1 совпадают.)
public class CoPrimetest {
@Test
public void testing() {
CoprimeNumbersTest instance = new CoprimeNumbersTest();
boolean result = instance.isCoprime( 1, 1 );
boolean expected = true;
assertEquals( expected, result );
}
}
Образец метода испытаний для записи isCoprime
метод в вашем CoprimeNumbersTest
класс может быть
@org.junit.Test
public void isCoprime() throws Exception {
org.junit.Assert.assertEquals(true, new CoprimeNumbersTest().isCoprime(3,4));
}
Поскольку возвращаемый тип метода boolean
, вы можете утверждать, что он равен либо true
или же false
,
Рекомендую, попробуйте сухой ход isCoprime
метод с этими входами (3,4)
и выяснить, что все заявления были покрыты. Исходя из этого, какие выводы, если бы вы предоставили, охватывали бы остальные утверждения. Это должно помочь покрыть код модульными тестами.
Кстати, попробуйте переименовать ваши классы, чтобы практиковать лучшее соглашение об именах, что-то вроде GreatestCommonDivisor.java
а также GreatestCommonDivisorTest.java
связывая их также.