【发布时间】:2015-11-10 03:42:50
【问题描述】:
在 Mockito 中,是否可以在类型转换的情况下定义模拟对象的行为,也许可以使用 Mockito 的“when ... thenReturn”功能来定义模拟对象的行为调用它的方法的事件?
例如,在下面的示例类和测试中...
public class MyClass {
public String myMethod(ObjectString arg) {
ans = (String) arg;
return ans;
}
}
public class MyClassTest {
@Test
public void myMethod_should_convert_to_string() {
MyClass testMyClass = new MyClass();
ObjectString mockObjectString = Mockito.mock(ObjectString.class);
String expected = "expected string returned";
Mockito.when(mockObjectString.IS_CAST_TO_STRING).thenReturn(expected);
String actual = testMyClass.myMethod(mockObjectString);
Assert.assertEquals(expected, actual);
}
}
...有什么我可以替换 'IS_CAST_TO_STRING' 的东西会导致 mockObjectString 被强制转换为“预期的字符串返回”的特定值?
【问题讨论】:
-
no.... 这将违反 Java 语言的基本语义。这就像问你是否可以将
1+1模拟为0 -
Java 中没有任何东西可以让您更改发生强制转换时发生的情况;不是 Mockito,不是任何东西。
-
SuperPowerMock 会让你... jk
-
等等,你真的要替换
toString(),想验证String x = myObj + " foo";是否有效吗?这可能看起来就像是被强制转换为字符串,但实际上是在调用toString()。嘲笑只是Mockito.doReturn("expected").when(mock).toString(); -
您可能要问的另一件事是,如果您将 Child 强制转换为 Parent,您如何验证 Parent 的方法是否被调用。而你不能;这不是面向对象在 Java 中的工作方式。您也不能以这种方式测试动态调度,因为 Java 方法调用是静态“链接”的。
标签: java unit-testing junit mockito