2017-02-02 2 views
0

Я новичок в программировании. Я должен написать тест JUnit для этой программы, чтобы найти НОД, как показано здесь:Как написать правильный тест JUnit для этого кода?

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); 
    } 

} 

Есть ли подходы, которые я пропускаю что может помочь улучшить мой код?

+0

@BrandonIbbotson класс 'CoPrimetest' общественности против' общественного класса CoprimeNumbersTest' –

+0

@BrandonIbbotson и кажется, что они не находятся в том же классе – nullpointer

+0

@Dan - Что такое 'GCDFinder', на самом деле' assetEquals (1, GCDFinder.CoprimeNumbersTest); 'не имеет смысла для меня. Также предположим, что это 'assertEquals' (r) – nullpointer

ответ

3

Вам нужно на самом деле вызвать ваш метод, как в обычном коде. (Следующий код не проверял, я не знаю, если 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); 
    } 
} 
+0

Спасибо, это исправление исправлено все. – dabberson567

1

Метод испытания образца писать против метода 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) и выяснить, что все заявления были покрыты. Исходя из этого, следует указать, какие исходные данные, если вы предоставили, будут охватывать оставшиеся заявления. Это должно помочь покрыть код с помощью Unit Tests.


На стороне записки, попробуйте переименовать классы на практике лучше именования, что-то вроде GreatestCommonDivisor.java и GreatestCommonDivisorTest.java связывая их.

Смежные вопросы