2017-02-02 2 views
0

Je suis novice en programmation. Je dois écrire un test JUnit pour ce programme pour trouver le GCD, montré ici:Comment puis-je écrire un test JUnit correct pour ce code?

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

C'est ce que je pouvais venir avec:

public class CoPrimetest { 

    @Test 
    public void testing() { 
     assetEquals(1, GCDFinder.CoprimeNumbersTest); 
    } 

} 

Existe-t-il des approches que je manque que peut aider à améliorer mon code?

+0

@BrandonIbbotson 'public class CoPrimetest' vs' public class CoprimeNumbersTest' –

+0

@BrandonIbbotson et il semble qu'ils ne sont pas dans la même classe – nullpointer

+0

@ Dan - Qu'est-ce que '' GCDFinder', en fait assetEquals (1, GCDFinder.CoprimeNumbersTest); Ça n'a pas de sens pour moi. Aussi son supposé être 'assertEquals' (r) – nullpointer

Répondre

3

Vous devez appeler votre méthode, comme dans un code normal. (Le code suivant n'est pas testé, je ne sais pas si 1 et 1 sont en fait co-prime.)

public class CoPrimetest { 

    @Test 
    public void testing() { 
     CoprimeNumbersTest instance = new CoprimeNumbersTest(); 
     boolean result = instance.isCoprime(1, 1); 
     boolean expected = true; 
     assertEquals(expected, result); 
    } 
} 
+0

Merci, ce correctif a tout réglé. – dabberson567

1

Méthode de test d'échantillon pour écrire contre la méthode isCoprime dans votre classe CoprimeNumbersTest pourrait être

@org.junit.Test 
public void isCoprime() throws Exception { 
    org.junit.Assert.assertEquals(true, new CoprimeNumbersTest().isCoprime(3,4)); 
} 

Étant donné que le type de retour de la méthode est boolean, vous pouvez l'affirmer égal à true ou false.

Suggérer, essayer de sécher exécuter isCoprime méthode avec ces entrées (3,4) et de comprendre ce que toutes les déclarations ont été couvertes. Basé sur le qui infère quelles entrées si vous fourniriez couvrirait le reste des déclarations. Cela devrait aider à couvrir le code avec des tests unitaires.


Sur une note côté, essayez de renommer vos cours pour pratiquer une meilleure convention de nommage, quelque chose comme GreatestCommonDivisor.java et GreatestCommonDivisorTest.java les reliant ainsi.