Page History
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.xpand.java; import org.testng.Assert; import org.testng.annotations.Test; import org.testng.annotations.BeforeSuite; import org.testng.annotations.AfterSuite; import org.testng.annotations.DataProvider; import org.testng.Reporter; import org.testng.reporters.XMLReporter; import org.testng.ITestResult; import com.xpand.annotations.Xray; public class CalcTest { @BeforeSuite public void setUp() throws Exception { } @AfterSuite public void tearDown() throws Exception { } @DataProvider public Object[][] ValidDataProvider() { return new Object[][]{ { 1, 2, 3 }, { 2, 3, 4 }, // error or the data itself :) { -1, 1, 0 } }; } @Test(dataProvider = "ValidDataProvider") @Xray(requirement = "CALC-1234", test = "CALC-1") public void CanAddNumbersFromGivenData(final int a, final int b, final int c) { Assert.assertEquals(Calculator.Add(a, b), c); } @Test @Xray(requirement = "CALC-1234", test = "CALC-2", labels = "core addition") public void CanAddNumbers() { Assert.assertEquals(Calculator.Add(1, 1),2); Assert.assertEquals(Calculator.Add(-1, 1),0); } @Test @Xray(requirement = "CALC-1235", labels = "core") public void CanSubtract() { Assert.assertEquals(Calculator.Subtract(1, 1), 0); Assert.assertEquals(Calculator.Subtract(-1, -1), 0); Assert.assertEquals(Calculator.Subtract(100, 5), 95); } @Test @Xray(requirement = "CALC-1236") public void CanMultiplyX() { Assert.assertEquals(Calculator.Multiply(1, 1), 1); Assert.assertEquals(Calculator.Multiply(-1, -1), 1); Assert.assertEquals(Calculator.Multiply(100, 5), 500); } @Test @Xray(requirement = "CALC-1237") public void CanDivide() { Assert.assertEquals(Calculator.Divide(1, 1), 1); Assert.assertEquals(Calculator.Divide(-1, -1), 1); Assert.assertEquals(Calculator.Divide(100, 5), 20); } @Test @Xray(test = "CALC-6") public void CanDoStuff() { Assert.assertNotEquals(true, true); } } |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.xpand.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* A Custom Annotation to inject additional information into a TestNG Test
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface Xray {
String requirement() default "";
String test() default "";
String labels() default "";
} |
Code Block | ||||
---|---|---|---|---|
| ||||
package com.xpand.annotations;
import java.lang.reflect.Method;
import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
/**
* The listener interface for receiving Xray events.
* The Listener can be automatically invoked when TestNG tests are run by using ServiceLoader mechanism.
* You can also add this listener to a TestNG Test class by adding
* <code>@Listeners({com.xpand.java.XrayAnnotationListener.class})</code>
* before the test class
*
* @see Xray
*/
public class XrayListener implements IInvokedMethodListener, ITestListener {
String requirement = null;
String test = null;
String labels = null;
boolean testSuccess = true;
/* (non-Javadoc)
* @see org.testng.IInvokedMethodListener#beforeInvocation(org.testng.IInvokedMethod, org.testng.ITestResult)
*/
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
if(method.isTestMethod() && annotationPresent(method, Xray.class) ) {
testResult.setAttribute("requirement", requirement);
testResult.setAttribute("test", test);
testResult.setAttribute("labels", labels);
}
}
private boolean annotationPresent(IInvokedMethod method, Class clazz) {
boolean retVal = method.getTestMethod().getConstructorOrMethod().getMethod().isAnnotationPresent(clazz) ? true : false;
return retVal;
}
/* (non-Javadoc)
* @see org.testng.IInvokedMethodListener#afterInvocation(org.testng.IInvokedMethod, org.testng.ITestResult)
*/
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
if(method.isTestMethod()) {
if( !testSuccess ) {
testResult.setStatus(ITestResult.FAILURE);
}
}
}
public void onTestStart(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestSuccess(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestFailure(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestSkipped(ITestResult result) {
// TODO Auto-generated method stub
}
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// TODO Auto-generated method stub
}
public void onStart(ITestContext context) {
for(ITestNGMethod m1 : context.getAllTestMethods()) {
if(m1.getConstructorOrMethod().getMethod().isAnnotationPresent(Xray.class)) {
//capture metadata information.
requirement = m1.getConstructorOrMethod().getMethod().getAnnotation(Xray.class).requirement();
test = m1.getConstructorOrMethod().getMethod().getAnnotation(Xray.class).test();
labels = m1.getConstructorOrMethod().getMethod().getAnnotation(Xray.class).labels();
}
}
}
public void onFinish(ITestContext context) {
// TODO Auto-generated method stub
}
} |
Code Block | ||||
---|---|---|---|---|
| ||||
{ "version": "1.0.0-*", "buildOptions": { "debugType": "portable", "emitEntryPoint": true }, "dependencies": { "NUnit": "3.5.0", "dotnet-test-nunit": "3.4.0-beta-2" }, "testRunner": "nunit", "frameworks": { "netcoreapp1.1": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.1.0" } }, "imports": "dnxcore50" } } } |
...