@Test public void testFilterShould() throws Exception { // Given: Filter filter = Filter.ALL; // When: underTest.filter(filter); // Then: assertThat(underTest.getDescription().getChildren().size()).isGreaterThan(0); }
@Test public void testDataProviderRunner() throws Exception { // Given: @SuppressWarnings("rawtypes") Class clazz = DataProviderRunnerTest.class; // When: DataProviderRunner underTest = new DataProviderRunner(clazz); // Then: assertThat(underTest).isNotNull(); assertThat(underTest.getTestClass()).isNotNull(); assertThat(underTest.getTestClass().getJavaClass()).isEqualTo(clazz); }
@edu.umd.cs.findbugs.annotations.SuppressWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD") @Before public void setup() throws Exception { classSetupException = null; underTest = new DataProviderRunner(DataProviderRunnerTest.class); MockitoAnnotations.initMocks(this); underTest.dataConverter = dataConverter; // override default dataConverter underTest.testValidator = testValidator; underTest.testGenerator = testGenerator; underTest.testGenerator = frameworkMethodGenerator; doReturn(testClass).when(underTest).getTestClassInt(); doReturn(anyMethod()).when(testMethod).getMethod(); doReturn(anyMethod()).when(dataProviderMethod).getMethod(); }
@Test(expected = NullPointerException.class) public void testValidateTestMethodsShouldThrowNullPointerExceptionIfArgumentIsNull() { // Given: // When: underTest.validateTestMethods(null); // Then: expect exception }
@Test(expected = NullPointerException.class) public void testFilterShouldThrowNullPointerExceptionForNull() throws Exception { // Given: // When: underTest.filter(null); // Then: expect exception }
@Test(expected = NullPointerException.class) public void testValidateInstanceMethodsShouldThrowNullPointerExceptionIfErrorsIsNull() { // Given: // When: underTest.validateInstanceMethods(null); // Then: expect exception }
@Test(expected = IllegalArgumentException.class) public void testGetDataProviderMethodShouldThrowIllegalArgumentExceptionIfTestMethodIsNull() { // Given: // When: underTest.getDataProviderMethod(null); // Then: expect exception }
@Test public void testGenerateExplodedTestMethodsForShouldReturnEmptyListIfArgumentIsNull() { // Given: // When: List<FrameworkMethod> result = underTest.generateExplodedTestMethodsFor(null); // Then: assertThat(result).isEmpty(); }
@Test public void testGetDataProviderMethodShouldReturnNullForNonDataProviderMethod() { // Given: doReturn(null).when(testMethod).getAnnotation(UseDataProvider.class); // When: FrameworkMethod result = underTest.getDataProviderMethod(testMethod); // Then: assertThat(result).isNull(); }
@Test public void testComputeTestMethodsShouldCallGenerateExplodedTestMethodsAndCacheResultIfCalledTheFirstTime() { // Given: underTest.computedTestMethods = null; doReturn(new ArrayList<FrameworkMethod>()) .when(underTest) .generateExplodedTestMethodsFor(anyListOf(FrameworkMethod.class)); // When: List<FrameworkMethod> result = underTest.computeTestMethods(); // Then: assertThat(result).isEqualTo(underTest.computedTestMethods); InOrder inOrder = inOrder(underTest); inOrder.verify(underTest).computeTestMethods(); inOrder.verify(underTest).invokeBeforeClass(); inOrder.verify(underTest).generateExplodedTestMethodsFor(anyListOf(FrameworkMethod.class)); verifyNoMoreInteractions(underTest); }
@Test public void testFindDataProviderLocationShouldReturnTestClassForNotSetLocationInUseDataProviderAnnotation() { // Given: doReturn(new Class<?>[0]).when(useDataProvider).location(); // When: TestClass result = underTest.findDataProviderLocation(useDataProvider); // Then: assertThat(result).isEqualTo(testClass); }
@Test public void testComputeTestMethodsShouldNotCallGenerateExplodedTestMethodsAndUseCachedResultIfCalledTheSecondTime() { // Given: final List<FrameworkMethod> expected = new ArrayList<FrameworkMethod>(); underTest.computedTestMethods = expected; doReturn(expected) .when(underTest) .generateExplodedTestMethodsFor(anyListOf(FrameworkMethod.class)); // When: List<FrameworkMethod> result = underTest.computeTestMethods(); // Then: assertThat(result).isSameAs(expected); assertThat(underTest.computedTestMethods).isSameAs(expected); verify(underTest).computeTestMethods(); verifyNoMoreInteractions(underTest); }
@Test(expected = IllegalArgumentException.class) public void testWithBeforeClassesShouldReturnNewStatementWrapingGivenStatementWhichThrowsStoredFailureOnEvaluation() throws Throwable { // Given: underTest.failure = new IllegalArgumentException(); Statement statement = new Statement() { @Override public void evaluate() { // to nothing } }; // When: Statement result = underTest.withBeforeClasses(statement); // Then: assertThat(result).isNotNull(); result.evaluate(); }
@Test(expected = IllegalStateException.class) public void testValidateTestMethodsShouldThrowIllegalStateExceptionIfDataProviderAnnotationNotFoundOnDataProviderMethod() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(dataProviderMethod).when(underTest).getDataProviderMethod(testMethod); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: expect exception }
@Test public void testValidateInstanceMethodsShouldNotThrowExceptionIfNoErrorsExistAndTestMethodsAreAvailable() { // Given: List<Throwable> errors = new ArrayList<Throwable>(); doReturn(asList(testMethod)).when(underTest).computeTestMethods(); // When: underTest.validateInstanceMethods(errors); // Then: assertThat(errors).isEmpty(); }
@edu.umd.cs.findbugs.annotations.SuppressWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD") @Test public void testInvokeBeforeClassShouldNotThrowButStoreFailure() { // Given: Throwable t = new Throwable(); classSetupException = t; // When: underTest.invokeBeforeClass(); // Then: assertThat(underTest.failure).isSameAs(t); }
@Test public void testValidateInstanceMethodsShouldAddExceptionIfComputeTestMethodsReturnsNoTestMethods() { // Given: List<Throwable> errors = new ArrayList<Throwable>(); doReturn(asList()).when(underTest).computeTestMethods(); // When: underTest.validateInstanceMethods(errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0)).hasMessage("No runnable methods"); }
@Test public void testValidateTestMethodsShouldCallTestValidatorValidateTestMethodForSingleTestMethod() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(Test.class); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: verify(testValidator).validateTestMethod(testMethod, errors); verifyNoMoreInteractions(testValidator); }
@Test public void testFindDataProviderLocationShouldReturnTestClassContainingSetLocationInUseDataProviderAnnotation() { // Given: final Class<?> dataProviderLocation = DataProviderRunnerTest.class; doReturn(new Class<?>[] {dataProviderLocation}).when(useDataProvider).location(); // When: TestClass result = underTest.findDataProviderLocation(useDataProvider); // Then: assertThat(result).isNotNull(); // assertThat(result.getJavaClass()).isEqualTo(dataProviderLocation); assertThat(result.getName()).isEqualTo(dataProviderLocation.getName()); }
@Test public void testGetDataProviderMethodShouldReturnNullForNotFoundDataProviderMethod() { // Given: doReturn(useDataProvider).when(testMethod).getAnnotation(UseDataProvider.class); doReturn("notAvailableDataProviderMethod").when(useDataProvider).value(); doReturn(testClass).when(underTest).findDataProviderLocation(useDataProvider); doReturn(asList(dataProviderMethod)).when(testClass).getAnnotatedMethods(DataProvider.class); doReturn("availableDataProviderMethod").when(dataProviderMethod).getName(); // When: FrameworkMethod result = underTest.getDataProviderMethod(testMethod); // Then: assertThat(result).isNull(); }
@Test public void testValidateTestMethodsShouldCallTestValidatorValidateDataProviderMethodIfDataProviderMethodFound() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(dataProviderMethod).when(underTest).getDataProviderMethod(testMethod); doReturn(dataProvider).when(dataProviderMethod).getAnnotation(DataProvider.class); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: verify(testValidator).validateDataProviderMethod(dataProviderMethod, dataProvider, errors); verifyNoMoreInteractions(testValidator); }
@Test public void testGenerateExplodedTestMethodsForShouldCallFrameworkMethodGeneratorWithNotFoundDataProviderMethodAndAddResult() { // Given: doReturn(null).when(underTest).getDataProviderMethod(testMethod); doReturn(asList(testMethod)) .when(frameworkMethodGenerator) .generateExplodedTestMethodsFor(testMethod, null); // When: List<FrameworkMethod> result = underTest.generateExplodedTestMethodsFor(asList(testMethod)); // Then: assertThat(result).containsOnly(testMethod); verify(frameworkMethodGenerator).generateExplodedTestMethodsFor(testMethod, null); verifyNoMoreInteractions(frameworkMethodGenerator); }
@Test public void testGetDataProviderMethodShouldReturnDataProviderMethodIfItExists() { // Given: final String dataProviderMethodName = "availableDataProviderMethod"; doReturn(useDataProvider).when(testMethod).getAnnotation(UseDataProvider.class); doReturn(dataProviderMethodName).when(useDataProvider).value(); doReturn(testClass).when(underTest).findDataProviderLocation(useDataProvider); doReturn(asList(dataProviderMethod)).when(testClass).getAnnotatedMethods(DataProvider.class); doReturn(dataProviderMethodName).when(dataProviderMethod).getName(); // When: FrameworkMethod result = underTest.getDataProviderMethod(testMethod); // Then: assertThat(result).isEqualTo(dataProviderMethod); }
@Test public void testValidateTestMethodsShouldCallTestValidatorValidateTestMethodForMultipleTestMethods() { // Given: FrameworkMethod testMethod2 = mock(FrameworkMethod.class); FrameworkMethod testMethod3 = mock(FrameworkMethod.class); doReturn(asList(testMethod, testMethod2, testMethod3)) .when(testClass) .getAnnotatedMethods(Test.class); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: verify(testValidator).validateTestMethod(testMethod, errors); verify(testValidator).validateTestMethod(testMethod2, errors); verify(testValidator).validateTestMethod(testMethod3, errors); verifyNoMoreInteractions(testValidator); }
@Test public void testGenerateExplodedTestMethodsForShouldCallFrameworkMethodGeneratorWithFoundDataProviderMethodAndAddResult() { // Given: doReturn(dataProviderMethod).when(underTest).getDataProviderMethod(testMethod); List<FrameworkMethod> explodedMethods = new ArrayList<FrameworkMethod>(); explodedMethods.add(mock(FrameworkMethod.class)); explodedMethods.add(mock(FrameworkMethod.class)); doReturn(explodedMethods) .when(frameworkMethodGenerator) .generateExplodedTestMethodsFor(testMethod, dataProviderMethod); // When: List<FrameworkMethod> result = underTest.generateExplodedTestMethodsFor(asList(testMethod)); // Then: assertThat(result).hasSize(2).containsAll(explodedMethods); verify(frameworkMethodGenerator).generateExplodedTestMethodsFor(testMethod, dataProviderMethod); verifyNoMoreInteractions(frameworkMethodGenerator); }
@Test public void testValidateTestMethodsShouldWorkCorrectlyForMultipleMethodsAnnotatedWithUseDataProvider() { // Given: String dataProviderName = "notFoundDataProvider3"; FrameworkMethod testMethod2 = mock(FrameworkMethod.class); FrameworkMethod testMethod3 = mock(FrameworkMethod.class); FrameworkMethod dataProviderMethod2 = mock(FrameworkMethod.class); DataProvider dataProvider2 = mock(DataProvider.class); doReturn(asList(testMethod, testMethod2, testMethod3)) .when(testClass) .getAnnotatedMethods(UseDataProvider.class); doReturn(dataProviderMethod).when(underTest).getDataProviderMethod(testMethod); doReturn(dataProvider).when(dataProviderMethod).getAnnotation(DataProvider.class); doReturn(dataProviderMethod2).when(underTest).getDataProviderMethod(testMethod2); doReturn(dataProvider2).when(dataProviderMethod2).getAnnotation(DataProvider.class); doReturn(null).when(underTest).getDataProviderMethod(testMethod3); doReturn(useDataProvider).when(testMethod3).getAnnotation(UseDataProvider.class); doReturn(dataProviderName).when(useDataProvider).value(); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()) .contains(dataProviderName) .containsIgnoringCase("no such dataprovider"); verify(testValidator).validateDataProviderMethod(dataProviderMethod, dataProvider, errors); verify(testValidator).validateDataProviderMethod(dataProviderMethod2, dataProvider2, errors); verifyNoMoreInteractions(testMethod); }
@Test public void testValidateTestMethodsShouldAddErrorIfDataProviderMethodNotFoundForMethodWithUseDataProvider() { // Given: String dataProviderName = "notFoundDataProvider"; doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(null).when(underTest).getDataProviderMethod(testMethod); doReturn(useDataProvider).when(testMethod).getAnnotation(UseDataProvider.class); doReturn(dataProviderName).when(useDataProvider).value(); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()) .contains(dataProviderName) .containsIgnoringCase("no such dataprovider"); verifyZeroInteractions(testValidator); }
@Test public void testWithBeforeClassesShouldReturnNewStatementWrapingGivenStatementWhichShouldBeExecutedOnEvaluation() throws Throwable { // Given: final AtomicBoolean evaluated = new AtomicBoolean(false); Statement statement = new Statement() { @Override public void evaluate() { evaluated.set(true); } }; // When: Statement result = underTest.withBeforeClasses(statement); // Then: assertThat(result).isNotNull(); assertThat(evaluated.get()).isFalse(); result.evaluate(); assertThat(evaluated.get()).isTrue(); }
@Test public void testValidateInstanceMethodsShouldNotThrowExceptionIfComputeTestMethodsWouldThrowExceptionButErrorsAlreadyExistsBefore() { // Given: List<Throwable> errors = new ArrayList<Throwable>(); doAnswer( new Answer<Void>() { @SuppressWarnings("unchecked") public Void answer(InvocationOnMock invocation) throws Throwable { ((List<Throwable>) invocation.getArguments()[0]).add(new Error()); return null; } }) .when(underTest) .validateTestMethods(errors); doThrow(IllegalArgumentException.class).when(underTest).computeTestMethods(); // When: underTest.validateInstanceMethods(errors); // Then: no exception }