Skip to content

Instantly share code, notes, and snippets.

@Cherubi
Created May 31, 2012 19:43
Show Gist options
  • Save Cherubi/2845748 to your computer and use it in GitHub Desktop.
Save Cherubi/2845748 to your computer and use it in GitHub Desktop.
MurtolukuTest.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import fi.helsinki.cs.tmc.edutestutils.Points;
import fi.helsinki.cs.tmc.edutestutils.ReflectionUtils;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.BeforeClass;
/**
*
* @author Usagi-chan
*/
public class MurtolukuTest {
private Class luokka;
private Constructor konstruktori1, konstruktori2;
public MurtolukuTest() {
}
@Before
public void setUp() {
try {
luokka = ReflectionUtils.findClass("Murtoluku");
} catch (AssertionError e) {
fail("Ethän ole poistanut luokkaa Murtoluku.");
} catch (Throwable t) {
fail("Outo virhe.");
}
try {
konstruktori2 = ReflectionUtils.requireConstructor(luokka, int.class, int.class);
} catch (AssertionError e) {
fail("Luokan yhden konstruktorin tulee ottaa parametrikseen kaksi kokonaislukua.");
}
try {
konstruktori1 = ReflectionUtils.requireConstructor(luokka, int.class);
} catch (AssertionError e) {
fail("Luokan yhden konstruktorin tulee ottaa parametrikseen yksi kokonaisluku.");
}
}
private Method haeMetodi(Class palautusarvo, String metodinNimi) {
Method metodi = null;
try {
ReflectionUtils.requireMethod(luokka, String.class, "toString");
ReflectionUtils.requireMethod(luokka, metodinNimi);
ReflectionUtils.requireMethod(luokka, String.class, "toString");
metodi = ReflectionUtils.requireMethod(luokka, metodinNimi);
} catch (Throwable t) {
fail("Luokalla tulee olla metodi \"" + metodinNimi + "\"");
}
return metodi;
}
/**
* Testaa, että osoittajan hakeminen toimii kahden parametrin konstruktorilla.
*/
@Test
@Points("1.2.1")
public void haeOsoittajaToimiiKahdenParametrinKonstruktorilla() {
haeOsoittajaToimii(3, 4);
haeOsoittajaToimii(5, 2);
haeOsoittajaToimii(-1, 6);
}
private void haeOsoittajaToimii(int osoittaja, int nimittaja) {
int haettuOsoittaja = haeOsoittaja(osoittaja, nimittaja);
assertFalse("Metodi haeOsoittaja antaa nimittäjän kun osoittaja on " + osoittaja + " ja nimittaja " + nimittaja + ".\nTestattiin konstruktori, joka ottaa kaksi parametriä. Metodin antama osoittaja oli " + haettuOsoittaja + ".", haettuOsoittaja == nimittaja);
assertTrue("Metodi haeOsoittaja antaa väärän osoittajan kun osoittaja on " + osoittaja + ". Metodin antama arvo oli " + haettuOsoittaja + ".\nTestattiin konstruktori, joka ottaa kaksi parametriä.", haettuOsoittaja == osoittaja);
}
private int haeOsoittaja(int osoittaja, int nimittaja) {
Method metodi = haeMetodi(int.class, "haeOsoittaja");
try {
Object murtoluku = ReflectionUtils.invokeConstructor(konstruktori2, osoittaja, nimittaja);
return ReflectionUtils.invokeMethod(int.class, metodi, murtoluku);
} catch (Throwable t) {
fail("Palauttaahan haeOsoittaja-metodi kokonaisluvun.");
return 0;
}
}
/**
* Testaa, että osoittajan hakeminen toimii yhden parametrin konstruktorilla.
*/
@Test
@Points("1.2.1")
public void haeOsoittajaToimiiYhdenParametrinKonstruktorilla() {
haeOsoittajaToimii(3);
haeOsoittajaToimii(5);
haeOsoittajaToimii(-3);
}
private void haeOsoittajaToimii(int osoittaja) {
int haettuOsoittaja = haeOsoittaja(osoittaja);
assertFalse("Metodi haeOsoittaja antaa nimittäjän kun nimittaja on 1 ja osoittaja " + osoittaja + ".\nTestattiin konstruktori, joka ottaa yhden parametrin. Metodin antama osoittaja oli " + haettuOsoittaja + ".", haettuOsoittaja == 1);
assertTrue("Metodi haeOsoittaja antaa väärän osoittajan kun osoittaja on " + 1 + ". Metodin antama arvo oli " + haettuOsoittaja + ".\nTestattiin konstruktori, joka ottaa yhden parametrin.", haettuOsoittaja == osoittaja);
}
private int haeOsoittaja(int osoittaja) {
Method metodi = haeMetodi("haeOsoittaja");
try {
Object murtoluku = ReflectionUtils.invokeConstructor(konstruktori1, osoittaja);
return ReflectionUtils.invokeMethod(int.class, metodi, murtoluku);
} catch (Throwable t) {
fail("Virhe joka on jo catchattu.");
return 0;
}
}
/**
* Testaa, että nimittajan hakeminen toimii kahden parametrin konstruktorilla.
*/
@Test
@Points("1.2.1")
public void haeNimittajaToimiiKahdenParametrinKonstruktorilla() {
haeNimittajaToimii(21, 7);
haeNimittajaToimii(5, 4);
haeNimittajaToimii(4, -5);
}
private void haeNimittajaToimii(int osoittaja, int nimittaja) {
int haettuNimittaja = haeNimittaja(osoittaja, nimittaja);
assertFalse("haeNimittaja-metodi palautti osoittajan. Testattiin kahden parametrin konstruktoria.", haettuNimittaja == osoittaja);
assertTrue("Haettu nimittaja oli " + haettuNimittaja + " kun sen piti olla " + nimittaja + ". Testattiin kahden parametrin konstruktoria.", haettuNimittaja == nimittaja);
}
public int haeNimittaja(int osoittaja, int nimittaja) {
Method metodi = haeMetodi("haeNimittaja");
try {
Object murtoluku = ReflectionUtils.invokeConstructor(konstruktori2, osoittaja, nimittaja);
return ReflectionUtils.invokeMethod(int.class, metodi, murtoluku);
} catch (Throwable t) {
fail("Virhe joka on jo catchattu.");
return 0;
}
}
/**
* Testaa, että nimittajan hakeminen toimii yhden parametrin konstruktorilla.
*/
@Test
@Points("1.2.1")
public void haeNimittajaToimiiYhdenParametrinKonstruktorilla() {
haeNimittajaToimii(6);
haeNimittajaToimii(10);
haeNimittajaToimii(-5);
}
private void haeNimittajaToimii(int osoittaja) {
int haettuNimittaja = haeNimittaja(osoittaja);
assertFalse("haeNimittaja-metodi palautti osoittajan. Testattiin yhden parametrin konstruktoria.", haettuNimittaja == osoittaja);
assertTrue("Haettu nimittaja oli " + haettuNimittaja + " kun sen piti olla 1. Testattiin yhden parametrin konstruktoria.", haettuNimittaja == 1);
}
public int haeNimittaja(int osoittaja) {
Method metodi = haeMetodi("haeNimittaja");
try {
Object murtoluku = ReflectionUtils.invokeConstructor(konstruktori1, osoittaja);
return ReflectionUtils.invokeMethod(int.class, metodi, murtoluku);
} catch (Throwable t) {
fail("Virhe joka on jo catchattu.");
return 0;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment