Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Så følger en kort beskrivelse af de problemstillinger vi har haft ifm. oprettelsen af tests. Vi gennemgår de hjælpeklasser og beslutninger, som er lavet for at give et bedre overblik og en nemmere tilgang til at lave parametriseret tests - og til sidst et eksempel på brugen af hjælpeklasserne.

Introduktion til Parameterized tests

En parametriseret JUnit4 test klasse skal afvikles med org.junit.runners.Parameterized. Derfor angives annotation @RunWith(Parameterized.class) på klassen.

Der skal angives en metode, som annoteres med org.junit.runners.Parameterized.Parameters, som er de parametre der bruges i test metoderne. Metoden returnere en java.lang.Iterable bestående af et Object[], hvor hvert Object[] er det datasæt af parametre, som et test genneløb skal bruge. Testene gennemløbes for hvert entry der er i java.lang.Iterable.

Inputtet 'name' til org.junit.runners.Parameterized.Parameters annoteringen angiver navnet på parametriseret test.

Datasæt til tests angives vha. org.junit.runners.Parameterized.Parameter. Her angiver man et index som input til annoteringen, så det peger på et specifikt Object i aktuelle Object[].

Hjælpeklasser til Parameterized tests i Seal.java


Code Block
languagejava
titleSimple Unittest
public class SimpleVaultTest {
	@Test
	public void testCertificate() {
		X509Certificate certificateToTest = CredentialVaultTestUtil.getCredentialVault().getSystemCredentialPair().getCertificate();
		DistinguishedName dn = new DistinguishedName(certificateToTest.getSubjectX500Principal());
		assertEquals("Forventede noget helt andet her?", "TU GENEREL MOCES M CPR gyldig", dn.getCommonName());
	}
}

...

Code Block
languagejava
titleKompleks Simple Parametriseret Unittest
@RunWith(Parameterized.class)
public class SimpleVaultTest {
	@Parameter(0)
	public X509Certificate certificateToTest; //Skal være public!
	@Parameters
	public static Iterable<Object[]> data() {
		return Arrays.asList(new Object[][] {
				{ CredentialVaultTestUtil.getCredentialVault().getSystemCredentialPair().getCertificate() },
		});
	}
	@Test
	public void testCertificateCommonName() { CredentialVaultTestUtil.getMoces3CredentialVault().getSystemCredentialPair().getCertificate() }
		}
		DistinguishedName dn = new DistinguishedName(certificateToTest.getSubjectX500Principal());
		assertEquals("Forventede noget helt andet her?", "TU GENEREL MOCES M CPR gyldig", dn.getCommonName());
	}
	@Test
	public void testCertificateCommonNametestCertificateSubjectSerialNumber() {
		DistinguishedName dn = new DistinguishedName(certificateToTest.getSubjectX500Principal());
		assertEquals("Forventede noget helt andet her?", "CVR:30808460-RID:42634739", dn.getSubjectSerialNumber());
	}
}
Code Block
languagejava
titleKompleks Parametriseret Unittest
@RunWith(Parameterized.class)
public class SimpleVaultTest {
	@Parameter(0)
	public X509Certificate certificateToTest; //Skal være public!
	@Parameter(1)
	public String expectedCommonName; 
	@Parameter(2)
	public String expectedSubjectSerialNumber; 
	@Parameters(name ="Test {0}")
	public static Iterable<Object[]> data() {
		return Arrays.asList(new Object[][] {{ CredentialVaultTestUtil.getCredentialVault().getSystemCredentialPair().getCertificate(), 
					"TU GENEREL MOCES M CPR gyldig",
					"CVR:30808460-RID:42634739"
				}, { CredentialVaultTestUtil.getMoces3CredentialVault().getSystemCredentialPair().getCertificate(), 
					"Tonnis Vestergaard",
					"UI:DK-153279bd-07cb-4128-a8b1-666107fba6d5"}});
	}
	@Test
	public void testCertificateCommonName() {
		DistinguishedName dn = new DistinguishedName(certificateToTest.getSubjectX500Principal());
		assertEquals("Forventede noget helt andet her?", expectedCommonName, dn.getCommonName());
	}
	@Test
	public void testCertificateSubjectSerialNumber() {
		DistinguishedName dn = new DistinguishedName(certificateToTest.getSubjectX500Principal());
		assertEquals("Forventede noget helt andet her?", expectedSubjectSerialNumber, dn.getSubjectSerialNumber());
	}
}

Image Added

Code Block
languagejava
titleKompleks Parametriseret Unittest
@RunWith(Parameterized.class)
public class SimpleVaultTest {
	@Parameter(0)
	public String suiteName;
	@Parameter(1)
	public Validators validators;
	@Parameter(2)
	public X509Certificate certificateToTest;

	@Parameters(name = "{0}")
	public static Iterable<Object[]> data() {
		TestDataBuilder builder = new TestDataBuilder();	
		
		TestData credentialVaultTest = builder.newTest("CredentialVault");
		credentialVaultTest.parameters(CredentialVaultTestUtil.getCredentialVault().getSystemCredentialPair().getCertificate());
		credentialVaultTest.expect("CertificateCommonName", "TU GENEREL MOCES M CPR gyldig");
		credentialVaultTest.expect("SubjectSerialNumber", "CVR:30808460-RID:42634739");
	
		TestData moces3CredentialVaultTest = builder.newTest("Moces3CredentialVault");
		moces3CredentialVaultTest.parameters(CredentialVaultTestUtil.getMoces3CredentialVault().getSystemCredentialPair().getCertificate());
		moces3CredentialVaultTest.expect("CertificateCommonName", "Tonnis Vestergaard");
		moces3CredentialVaultTest.expect("SubjectSerialNumber", "UI:DK-153279bd-07cb-4128-a8b1-666107fba6d5");
		
		return builder.build();
	}
	@Test
	public void testCertificateCommonName() {
		DistinguishedName dn = new DistinguishedName(certificateToTest.getSubjectX500Principal());		
		validators.getValidator("CertificateCommonName").assertSuccess(dn.getCommonName());
	}
	@Test
	public void testCertificateSubjectSerialNumber() {
		DistinguishedName dn = new DistinguishedName(certificateToTest.getSubjectX500Principal());
		validators.getValidator("SubjectSerialNumber").assertSuccess(dn.getSubjectSerialNumber());
	}
}

...