Skip to content

Commit 55ae0c6

Browse files
Merge pull request #41 from mockito/fix-40
Start MockitoSession only for test method and BeforeMethod
2 parents 949bdac + d4e66dd commit 55ae0c6

8 files changed

+141
-22
lines changed

README.md

+6
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ By default `MockitoSession` is started with `STRICT_STUBS`.
6363
You can change this behavior by adding `@MockitoSettings` to your test class.
6464

6565
```java
66+
import org.mockito.quality.Strictness;
6667
import org.mockito.testng.MockitoTestNGListener;
6768
import org.mockito.testng.MockitoSettings;
6869
import org.testng.annotations.Listeners;
@@ -74,6 +75,11 @@ public class MyTest {
7475
}
7576
```
7677

78+
## Notices
79+
80+
- `MockitoSession` is started before each `test method` or before method annotated with `@BeforeMethod`,
81+
another annotations `@BeforeXXX` aren't supported #40
82+
7783
## Developing
7884

7985
- open in IDEA to develop or run ```./gradlew idea``` and then open in IDEA

src/main/java/org/mockito/testng/MockitoTestNGListener.java

+6-11
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.mockito.quality.Strictness;
2020
import org.testng.IInvokedMethod;
2121
import org.testng.IInvokedMethodListener;
22-
import org.testng.ITestNGMethod;
2322
import org.testng.ITestResult;
2423
import org.testng.annotations.Listeners;
2524

@@ -30,8 +29,9 @@
3029
*
3130
* <ul>
3231
* <li>
33-
* Before any TestNG method, either a <em>configuration method</em> (&#064;BeforeMethod, &#064;BeforeClass, etc)
34-
* or a <em>test</em> method MockitoSession is started by:
32+
* Before any <em>test</em> method or a <em>configuration method</em> <em>&#064;BeforeMethod</em>
33+
* MockitoSession is started by:
34+
*
3535
* <pre class="code"><code class="java">
3636
* Mockito.mockitoSession()
3737
* .initMocks(testInstance)
@@ -125,16 +125,11 @@ public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
125125
}
126126

127127
private boolean shouldBeRunBeforeInvocation(IInvokedMethod method, ITestResult testResult) {
128-
return !isAfterConfigurationMethod(method) && hasMockitoTestNGListener(testResult);
128+
return (method.isTestMethod() || isBeforeMethod(method)) && hasMockitoTestNGListener(testResult);
129129
}
130130

131-
private boolean isAfterConfigurationMethod(IInvokedMethod method) {
132-
ITestNGMethod testMethod = method.getTestMethod();
133-
return testMethod.isAfterClassConfiguration()
134-
|| testMethod.isAfterMethodConfiguration()
135-
|| testMethod.isAfterGroupsConfiguration()
136-
|| testMethod.isAfterTestConfiguration()
137-
|| testMethod.isAfterSuiteConfiguration();
131+
private boolean isBeforeMethod(IInvokedMethod method) {
132+
return method.getTestMethod().isBeforeMethodConfiguration();
138133
}
139134

140135
private boolean shouldBeRunAfterInvocation(IInvokedMethod method, ITestResult testResult) {
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,37 @@
11
/*
2-
* Copyright (c) 2017 Mockito contributors
2+
* Copyright (c) 2021 Mockito contributors
33
* This program is made available under the terms of the MIT License.
44
*/
55
package org.mockitousage.testng;
66

7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
import java.util.Observer;
10+
711
import org.mockito.Mock;
812
import org.mockito.testng.MockitoTestNGListener;
913
import org.testng.annotations.BeforeClass;
1014
import org.testng.annotations.Listeners;
1115
import org.testng.annotations.Test;
1216

13-
import java.util.Observer;
14-
15-
import static org.assertj.core.api.Assertions.assertThat;
16-
1717
@Listeners(MockitoTestNGListener.class)
18-
public class EnsureMocksAreInitializedBeforeBeforeClassMethodTest {
18+
public class EnsureMocksAreNotInitializedBeforeBeforeClassMethodTest {
1919

20-
@Mock Observer observer;
20+
@Mock
21+
Observer observer;
2122

2223
@BeforeClass
23-
private void make_sure_mock_is_initialized() {
24+
private void make_sure_mock_is_not_initialized() {
25+
assertThat(observer).isNull();
26+
}
27+
28+
@Test
29+
public void dummy_test1() {
2430
assertThat(observer).isNotNull();
2531
}
2632

2733
@Test
28-
public void dummy_test_see_BeforeClass_code() throws Exception {
34+
public void dummy_test2() {
35+
assertThat(observer).isNotNull();
2936
}
3037
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (c) 2021 Mockito contributors
3+
* This program is made available under the terms of the MIT License.
4+
*/
5+
package org.mockitousage.testng;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
import java.util.Observer;
10+
11+
import org.mockito.Mock;
12+
import org.mockito.testng.MockitoTestNGListener;
13+
import org.testng.annotations.BeforeGroups;
14+
import org.testng.annotations.Listeners;
15+
import org.testng.annotations.Test;
16+
17+
@Listeners(MockitoTestNGListener.class)
18+
public class EnsureMocksAreNotInitializedBeforeBeforeGroupsMethodTest {
19+
20+
@Mock
21+
Observer observer;
22+
23+
@BeforeGroups
24+
private void make_sure_mock_is_not_initialized() {
25+
assertThat(observer).isNull();
26+
}
27+
28+
@Test
29+
public void dummy_test1() {
30+
assertThat(observer).isNotNull();
31+
}
32+
33+
@Test
34+
public void dummy_test2() {
35+
assertThat(observer).isNotNull();
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (c) 2021 Mockito contributors
3+
* This program is made available under the terms of the MIT License.
4+
*/
5+
package org.mockitousage.testng;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
import java.util.Observer;
10+
11+
import org.mockito.Mock;
12+
import org.mockito.testng.MockitoTestNGListener;
13+
import org.testng.annotations.BeforeSuite;
14+
import org.testng.annotations.Listeners;
15+
import org.testng.annotations.Test;
16+
17+
@Listeners(MockitoTestNGListener.class)
18+
public class EnsureMocksAreNotInitializedBeforeBeforeSuiteMethodTest {
19+
20+
@Mock
21+
Observer observer;
22+
23+
@BeforeSuite
24+
private void make_sure_mock_is_not_initialized() {
25+
assertThat(observer).isNull();
26+
}
27+
28+
@Test
29+
public void dummy_test1() {
30+
assertThat(observer).isNotNull();
31+
}
32+
33+
@Test
34+
public void dummy_test2() {
35+
assertThat(observer).isNotNull();
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (c) 2021 Mockito contributors
3+
* This program is made available under the terms of the MIT License.
4+
*/
5+
package org.mockitousage.testng;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
import java.util.Observer;
10+
11+
import org.mockito.Mock;
12+
import org.mockito.testng.MockitoTestNGListener;
13+
import org.testng.annotations.BeforeTest;
14+
import org.testng.annotations.Listeners;
15+
import org.testng.annotations.Test;
16+
17+
@Listeners(MockitoTestNGListener.class)
18+
public class EnsureMocksAreNotInitializedBeforeBeforeTestMethodTest {
19+
20+
@Mock
21+
Observer observer;
22+
23+
@BeforeTest
24+
private void make_sure_mock_is_not_initialized() {
25+
assertThat(observer).isNull();
26+
}
27+
28+
@Test
29+
public void dummy_test1() {
30+
assertThat(observer).isNotNull();
31+
}
32+
33+
@Test
34+
public void dummy_test2() {
35+
assertThat(observer).isNotNull();
36+
}
37+
}

src/test/java/org/mockitousage/testng/failuretests/HasUnusedStubs.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
@Test(description = "Always failing, shouldn't be listed in 'mockito-testng.xml'")
1414
public class HasUnusedStubs {
1515
@Mock
16-
List mock;
16+
List<String> mock;
1717
@Test public void test() {
1818
when(mock.add("a")).thenReturn(true);
1919
}

version.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=0.2.*
1+
version=0.3.*

0 commit comments

Comments
 (0)