blob: 36a76003f783c42e30ba6f6bf5c553dd79998696 [file] [log] [blame]
package org.apache.maven.surefire.testng;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import junit.framework.TestCase;
import org.apache.maven.surefire.report.CategorizedReportEntry;
import org.apache.maven.surefire.report.RunListener;
import org.apache.maven.surefire.report.SimpleReportEntry;
import org.mockito.ArgumentCaptor;
import org.testng.ITestClass;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import static org.powermock.reflect.Whitebox.invokeMethod;
/**
* Tests for {@link TestNGReporter}.
*/
public class TestNGReporterTest extends TestCase
{
public void testParameterizedTestName() throws Exception
{
ITestNGMethod method = mock( ITestNGMethod.class );
when( method.getCurrentInvocationCount() ).thenReturn( 3 );
ITestResult testResult = mock( ITestResult.class );
when( testResult.getName() ).thenReturn( "myTest" );
when( testResult.getParameters() ).thenReturn( new String[] { "val1", "val2" } );
when( testResult.getMethod() ).thenReturn( method );
String testName = invokeMethod( TestNGReporter.class, "testName", testResult );
assertThat( testName )
.isEqualTo( "myTest[val1, val2](3)" );
}
public void testWithoutParameterizedTestName() throws Exception
{
ITestNGMethod method = mock( ITestNGMethod.class );
ITestResult testResult = mock( ITestResult.class );
when( testResult.getName() ).thenReturn( "myTest" );
when( testResult.getMethod() ).thenReturn( method );
String testName = invokeMethod( TestNGReporter.class, "testName", testResult );
assertThat( testName )
.isEqualTo( "myTest" );
}
public void testOnTestStart()
{
ITestClass cls = mock( ITestClass.class );
when( cls.getName() ).thenReturn( "pkg.MyClass" );
ITestNGMethod method = mock( ITestNGMethod.class );
when( method.getCurrentInvocationCount() ).thenReturn( 3 );
when( method.getGroups() ).thenReturn( new String[0] );
ITestResult testResult = mock( ITestResult.class );
when( testResult.getTestClass() ).thenReturn( cls );
when( testResult.getMethod() ).thenReturn( method );
when( testResult.getName() ).thenReturn( "myTest" );
when( testResult.getParameters() ).thenReturn( new String[] { "val1", "val2" } );
RunListener listener = mock( RunListener.class );
TestNGReporter reporter = new TestNGReporter( listener );
reporter.onTestStart( testResult );
ArgumentCaptor<CategorizedReportEntry> reportEntry = ArgumentCaptor.forClass( CategorizedReportEntry.class );
verify( listener ).testStarting( reportEntry.capture() );
verifyNoMoreInteractions( listener );
assertThat( reportEntry.getValue().getSourceName() )
.isEqualTo( "pkg.MyClass" );
assertThat( reportEntry.getValue().getName() )
.isEqualTo( "myTest[val1, val2](3)" );
}
public void testOnTestSuccess()
{
ITestClass cls = mock( ITestClass.class );
when( cls.getName() ).thenReturn( "pkg.MyClass" );
ITestNGMethod method = mock( ITestNGMethod.class );
when( method.getCurrentInvocationCount() ).thenReturn( 3 );
ITestResult testResult = mock( ITestResult.class );
when( testResult.getTestClass() ).thenReturn( cls );
when( testResult.getMethod() ).thenReturn( method );
when( testResult.getName() ).thenReturn( "myTest" );
when( testResult.getParameters() ).thenReturn( new String[] { "val1", "val2" } );
RunListener listener = mock( RunListener.class );
TestNGReporter reporter = new TestNGReporter( listener );
reporter.onTestSuccess( testResult );
ArgumentCaptor<SimpleReportEntry> reportEntry = ArgumentCaptor.forClass( SimpleReportEntry.class );
verify( listener ).testSucceeded( reportEntry.capture() );
verifyNoMoreInteractions( listener );
assertThat( reportEntry.getValue().getSourceName() )
.isEqualTo( "pkg.MyClass" );
assertThat( reportEntry.getValue().getName() )
.isEqualTo( "myTest[val1, val2](3)" );
}
public void testOnTestFailure()
{
Exception stackTrace = new Exception();
ITestClass cls = mock( ITestClass.class );
when( cls.getName() ).thenReturn( getClass().getName() );
ITestNGMethod method = mock( ITestNGMethod.class );
when( method.getCurrentInvocationCount() ).thenReturn( 1 );
when( method.getMethodName() ).thenReturn( "myTest" );
ITestResult testResult = mock( ITestResult.class );
when( testResult.getThrowable() ).thenReturn( stackTrace );
when( cls.getRealClass() ).thenReturn( getClass() );
when( testResult.getTestClass() ).thenReturn( cls );
when( testResult.getMethod() ).thenReturn( method );
when( testResult.getName() ).thenReturn( "myTest" );
when( testResult.getParameters() ).thenReturn( new String[] { "val1", "val2" } );
RunListener listener = mock( RunListener.class );
TestNGReporter reporter = new TestNGReporter( listener );
reporter.onTestFailure( testResult );
ArgumentCaptor<SimpleReportEntry> reportEntry = ArgumentCaptor.forClass( SimpleReportEntry.class );
verify( listener ).testFailed( reportEntry.capture() );
verifyNoMoreInteractions( listener );
assertThat( reportEntry.getValue().getSourceName() )
.isEqualTo( getClass().getName() );
assertThat( reportEntry.getValue().getName() )
.isEqualTo( "myTest[val1, val2](1)" );
assertThat( reportEntry.getValue().getStackTraceWriter() )
.isNotNull();
assertThat( reportEntry.getValue().getStackTraceWriter().getThrowable().getTarget() )
.isSameAs( stackTrace );
}
public void testOnSkippedTest()
{
Exception stackTrace = new Exception( "test skip reason" );
ITestClass cls = mock( ITestClass.class );
when( cls.getName() ).thenReturn( getClass().getName() );
ITestNGMethod method = mock( ITestNGMethod.class );
when( method.getCurrentInvocationCount() ).thenReturn( 1 );
ITestResult testResult = mock( ITestResult.class );
when( testResult.getThrowable() ).thenReturn( stackTrace );
when( testResult.getTestClass() ).thenReturn( cls );
when( testResult.getMethod() ).thenReturn( method );
when( testResult.getName() ).thenReturn( "myTest" );
when( testResult.getParameters() ).thenReturn( new String[] { "val1", "val2" } );
RunListener listener = mock( RunListener.class );
TestNGReporter reporter = new TestNGReporter( listener );
reporter.onTestSkipped( testResult );
ArgumentCaptor<SimpleReportEntry> reportEntry = ArgumentCaptor.forClass( SimpleReportEntry.class );
verify( listener ).testSkipped( reportEntry.capture() );
verifyNoMoreInteractions( listener );
assertThat( reportEntry.getValue().getSourceName() )
.isEqualTo( getClass().getName() );
assertThat( reportEntry.getValue().getName() )
.isEqualTo( "myTest[val1, val2](1)" );
assertThat( reportEntry.getValue().getMessage() )
.isEqualTo( stackTrace.getMessage() );
}
public void testOnTestFailedButWithinSuccessPercentage()
{
Exception stackTrace = new Exception();
ITestClass cls = mock( ITestClass.class );
when( cls.getName() ).thenReturn( getClass().getName() );
ITestNGMethod method = mock( ITestNGMethod.class );
when( method.getCurrentInvocationCount() ).thenReturn( 1 );
when( method.getMethodName() ).thenReturn( "myTest" );
ITestResult testResult = mock( ITestResult.class );
when( testResult.getThrowable() ).thenReturn( stackTrace );
when( cls.getRealClass() ).thenReturn( getClass() );
when( testResult.getTestClass() ).thenReturn( cls );
when( testResult.getMethod() ).thenReturn( method );
when( testResult.getName() ).thenReturn( "myTest" );
when( testResult.getParameters() ).thenReturn( new String[] { "val1", "val2" } );
RunListener listener = mock( RunListener.class );
TestNGReporter reporter = new TestNGReporter( listener );
reporter.onTestFailedButWithinSuccessPercentage( testResult );
ArgumentCaptor<SimpleReportEntry> reportEntry = ArgumentCaptor.forClass( SimpleReportEntry.class );
verify( listener ).testSucceeded( reportEntry.capture() );
verifyNoMoreInteractions( listener );
assertThat( reportEntry.getValue().getSourceName() )
.isEqualTo( getClass().getName() );
assertThat( reportEntry.getValue().getName() )
.isEqualTo( "myTest[val1, val2](1)" );
assertThat( reportEntry.getValue().getStackTraceWriter() )
.isNotNull();
assertThat( reportEntry.getValue().getStackTraceWriter().getThrowable().getTarget() )
.isSameAs( stackTrace );
}
}