【发布时间】:2016-11-09 12:17:21
【问题描述】:
在我测试的 MyClass 类中,我有:
public void execute(){
service.call(ThisClass::method1);
}
以下:
void method1(){do 1;}
void method2(){do 2;}
在测试中:
@Mock
Service service;
@Test
public void testCallMethod1()
{
MyClass myClass = new MyClass();
myClass.execute();
service.verify(any(Runnable.class));
}
它有效,但是,我如何验证该参数而不是任何 Runnable 是 method1 而不是 method2?
我正在寻找看起来像的解决方案(例如,不是真的有效):
service.verify(eq(MyClass::method1.getRunnable()))
【问题讨论】:
-
how do I specify that parameter was ...是什么意思如果你想知道调用了哪个方法,这可能不是最好的实现 -
代替那个,抱歉我的英语不好,编辑问题以澄清。
-
好的,这只是为了测试目的...错过了那部分。测试这个有点奇怪,因为结果很重要,实现它的方法有点难以检查。
method#()没有任何更新,我怀疑有办法。 -
可以说函数几乎是一等公民,但是为它们创建的函数式接口实现具有未指定的相等性。同样,值类型在未来的版本中可能会成为一等公民,但它们的装箱表示的对象身份将是未指定的。
Integer.valueOf(0xcafebabe) == Integer.valueOf(0xcafebabe)的结果也未指定。这并不意味着Integer对象不是一等公民…… -
您不能在
Runnable上拨打run并验证它是否具有预期的效果?然后你正在测试一个结果而不是一个实现细节
标签: java unit-testing java-8 mockito