2017-02-02 2 views
0

Ich bin neu in der Programmierung. Ich habe einen JUnit-Test für dieses Programm zu schreiben, das GCD zu finden, die hier gezeigt:Wie kann ich einen geeigneten JUnit Test für diesen Code schreiben?

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

Dies ist, was ich tun konnte:

public class CoPrimetest { 

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

} 

es irgendwelche Ansätze, die ich vermisst, dass kann helfen, meinen Code zu verbessern?

+0

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

+0

@BrandonIbbotson und es scheint, dass sie nicht in der gleichen Klasse – nullpointer

+0

@ Dan sind - Was 'GCDFinder', eigentlich' assetEquals (1, GCDFinder.CoprimeNumbersTest); 'ergibt keinen Sinn für mich. Auch sein angenommen zu sein 'assertEquals' (r) – nullpointer

Antwort

3

Sie müssen Ihre Methode tatsächlich aufrufen, wie im normalen Code. (Der folgende Code ist nicht getestet, ich weiß nicht, ob 1 und 1 eigentlich Co-prim ist.)

public class CoPrimetest { 

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

Danke, diese Reparatur hat alles repariert. – dabberson567

1

Eine Probe Testmethode schreiben gegen die isCoprime Methode in Ihrer CoprimeNumbersTest Klasse sein könnte

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

Da der Rückgabetyp der Methode boolean lautet, können Sie ihn entweder gleich true oder false bestätigen.

Würde vorschlagen, versuchen, isCoprime Methode mit diesen Eingaben (3,4) zu trocknen und herauszufinden, was alle Aussagen abgedeckt wurden. Basierend auf dem, was abzuleiten ist, welche Eingaben Sie liefern würden, würden Sie die restlichen Aussagen abdecken. Das sollte helfen, den Code mit Unit Tests abzudecken.


Auf einer Seite zur Kenntnis, versuchen Sie Ihre Klassen Umbenennung eine bessere Namenskonvention zu üben, so etwas wie GreatestCommonDivisor.java und GreatestCommonDivisorTest.java sie auch verbinden.

Verwandte Themen