Skip to content

Commit 5dd6582

Browse files
Inconvertible Mockito when situation involving lambda and static method. (#763)
* Showing situation where we wouldn't be able to safely convert `when(...).thenReturn(..)` to `staticMocked.when(...).thenReturn(..)` * Adding a change that would prevent it from tring to use a lambda parameter as a class, which leads to something that can't be compiled. * Update src/main/java/org/openrewrite/java/testing/mockito/MockitoWhenOnStaticToMockStatic.java --------- Co-authored-by: Sam Snyder <sam@moderne.io>
1 parent 82ffe5c commit 5dd6582

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

src/main/java/org/openrewrite/java/testing/mockito/MockitoWhenOnStaticToMockStatic.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ private List<Statement> maybeWrapStatementsInTryWithResourcesMockedStatic(J.Bloc
120120

121121
private @Nullable String getClassName(J.MethodInvocation whenArg) {
122122
J.Identifier clazz = null;
123-
if (whenArg.getSelect() instanceof J.Identifier) {
123+
// Having a fieldType implies that something is a field rather than a class itself
124+
if (whenArg.getSelect() instanceof J.Identifier && ((J.Identifier) whenArg.getSelect()).getFieldType() == null) {
124125
clazz = (J.Identifier) whenArg.getSelect();
125126
} else if (whenArg.getSelect() instanceof J.FieldAccess && ((J.FieldAccess) whenArg.getSelect()).getTarget() instanceof J.Identifier) {
126127
clazz = (J.Identifier) ((J.FieldAccess) whenArg.getSelect()).getTarget();

src/test/java/org/openrewrite/java/testing/mockito/MockitoWhenOnStaticToMockStaticTest.java

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class MockitoWhenOnStaticToMockStaticTest implements RewriteTest {
3131
public class A {
3232
public static Integer getNumber() {
3333
return 42;
34-
}
34+
}
3535
}
3636
""",
3737
SourceSpec::skip
@@ -43,7 +43,10 @@ public static Integer getNumber() {
4343
public class B {
4444
public static String getString() {
4545
return "";
46-
}
46+
}
47+
public String getStringNonStatic() {
48+
return "non-static";
49+
}
4750
}
4851
""",
4952
SourceSpec::skip
@@ -150,6 +153,45 @@ void test() {
150153
);
151154
}
152155

156+
@Test
157+
void doNotConvertIfScopeOfChangeWouldHaveToBeBroadened() {
158+
rewriteRun(
159+
spec -> spec.afterTypeValidationOptions(TypeValidation.builder().identifiers(false).build()),
160+
CLASS_B,
161+
//language=java
162+
java(
163+
"""
164+
import org.mockito.MockedConstruction;
165+
import org.mockito.MockedStatic;
166+
167+
import static org.mockito.Mockito.*;
168+
169+
class Test {
170+
void method() {
171+
// Would have to be changed starting here
172+
try (MockedConstruction<B> bMockConstruction = mockConstruction(B.class,
173+
(mock, context) -> {
174+
// Rather than just here
175+
when(mock.getString()).thenReturn("first");
176+
}
177+
)) {
178+
// Nothing here
179+
}
180+
// Doesn't require a change
181+
try (MockedConstruction<B> bMockConstruction = mockConstruction(B.class,
182+
(mock, context) -> {
183+
when(mock.getStringNonStatic()).thenReturn("second");
184+
}
185+
)) {
186+
// Nothing here
187+
}
188+
}
189+
}
190+
"""
191+
)
192+
);
193+
}
194+
153195
@Test
154196
void shouldHandleMultipleStaticMocksAndNestedStatements() {
155197
//language=java

0 commit comments

Comments
 (0)