public class DummyJava {
static public Void staticMechod(){
System.out.print("Dummy method is called");
return null;
}
}
class DummyCompanion {
companion object {
fun someCompanionMethod(){
System.out.printf("companion method is called\n")
}
}
}
现在有另一个类调用DummyCompanion.someCompanion
public class DummyWrapper {
public void callAStaticMethod(){
DummyJava.staticMechod();
}
public void callCompanionMethod(){
DummyCompanion.Companion.someCompanionMethod();
}
}
为了对CallastaticMethod()
进行单元测试,我们使用了以下方法
@RunWith(PowerMockRunner.class)
@PrepareForTest({DummyJava.class, DummyCompanion.Companion.class})
public class staticClassTest {
//This case works
@Test
public void testForStaticMethod() {
PowerMockito.mockStatic(DummyJava.class);
DummyWrapper testObject = new DummyWrapper();
Mockito.when(DummyJava.staticMechod()).thenCallRealMethod();
testObject.callAStaticMethod();
PowerMockito.verifyStatic(Dummy.class);
DummyJava.staticMechod();
}
//This case doesn't work. It always passes.
@Test
public void testForCompanionMethod() {
PowerMockito.mockStatic(DummyCompanion.Companion.class);
DummyWrapper testObject = new DummyWrapper();
testObject.callCompanionMethod();
PowerMockito.verifyStatic(DummyCompanion.Companion.class,Mockito.times(1));
DummyCompanion.Companion.someCompanionMethod();
}
我的问题是如何验证同伴方法是否被调用。
解决方案1:在调用类中添加调用方函数
public class DummyWrapper {
val foo get() = DummyCompanion.Companion
public void callAStaticMethod(){
foo.staticMechod();
}
public void callCompanionMethod(){
foo.someCompanionMethod();
}
}
在测试类中,我们可以使用Mockito为get()
函数提供一个存根,并验证了它的调用。
@Test
fun testCase{
....
val mockCompanionObj: DummyCompanion.Companion = mock()
val wrapper = DummyWrapper()
whenever(wrapper.foo).thenReturn(mockCompanionObj)
wrapper.callCompanionMethod()
verify(mockCompanionObj).someCompanionMethod()
....
}
解决方案2:在Mockk中使用Mockk嘲讽同伴对象很容易。不需要在源代码中插入测试接口对象。
@Test
fun testCompanionObject() {
//Mock the companion object
mockkObject(DummyCompanion.Companion)
//define the stubbing bechavior of a companion object method
every { DummyCompanion.Companion.companionMethod() } answers { stubMethod() }
val testObject = DummyWrapper()
//Call a method that calls the companion object method
//You can verify stubMethod() is called
testObject.callCompanionMethod()
verify(exactly = 1) { DummyCompanion.someCompanionMethod() }
}
在Kotlin的类中,一个对象和一个同伴对象有什么区别? 它的“静态”(我是java方面的)生命周期可能有区别吗?
遇到了另一个常见的问题,同时为Spring Batch编写单元测试和集成测试组件是如何模拟域对象。一个很好的例子是StepExecutionListener,如下所示: public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport { public ExitStatus afterSte
我目前正在尝试扩展一个使用Scala和Spark的机器学习应用程序。我正在使用我在Github上找到的Dieterich Lawson之前项目的结构 https://github.com/dieterichlawson/admm 该项目基本上使用SparkContext来构建训练样本块的RDD,然后对每个样本集执行局部计算(例如求解线性系统)。 我遵循同样的方案,但为了进行局部计算,我需要对每个训
我有一个类包含如下所示同伴对象。 我想在运行时修改同伴对象的属性。我将在这个类中添加数百个属性。所以我要做动态。我使用了这个方法,得到如下错误。
问题是我应该把和放在哪里,因为我不能使用带有扩展函数的同伴对象?
问题内容: 似乎模拟仅验证模拟对象的方法是否被调用,并且模拟对象始终具有类似以下内容的东西 但是我可以创建一个模拟对象并定义 然后验证另一个对象的方法是否被调用吗? 这是我想做的事情:我定义了一个模拟环境,无论发生什么情况都返回一个响应。但是然后我想验证在不同情况下调用anotherObj的不同方法。 怎么做? 问题答案: 您可以为此使用Mockito Spy。如果您设置为间谍,则可以验证该对象上