我正在使用Mockito验证InOrder对象的方法调用顺序.但是我对调用的总排序不感兴趣,只是在调用其他一些方法之前,某些方法调用都发生了.比如这样
@Test
public void testGroupOrder() {
Foo foo1 = mock(Foo.class);
Foo foo2 = mock(Foo.class);
Bar underTest = new Bar();
underTest.addFoo(foo1);
underTest.addFoo(foo2);
underTest.fire()
InOrder inOrder = inOrder(foo1,foo2);
inorder.verify(foo1).doThisFirst();
inorder.verify(foo2).doThisFirst();
inorder.verify(foo1).beforeDoingThis();
inorder.verify(foo2).beforeDoingThis();
}
Run Code Online (Sandbox Code Playgroud)
但是这个测试确实测试得太多了,因为它测试了Foo实例的顺序.但我只对不同方法的顺序感兴趣.事实上,我想underTest不区分它们的实例Foo,它们可能有一个内部顺序,所以foos被调用的顺序无关紧要.我想将其作为实现细节.
但重要的是,在调用任何其他foo 之前,doThisFirst()已经调用了所有 foos .有可能用Mockito表达吗?怎么样?beforeDoingThis()
我正在使用OSGi和声明性服务(DS),目前正在考虑如何正确处理日志记录。由于无论如何我都在使用DS,因此使用OSGi服务纲要中指定的LogService作为强制性服务参考似乎很自然。我已经在ekkes角落和nogunners的博客上阅读了很多网络文章,但是我仍然不清楚:
如何区分不同的服务组件(或使用分解因子的组件时不同的服务组件实例)?
如果我看一下使用Logback的LogListener的nogunners实现,他将使用bundlecontext的Bundle-Id来区分它们。好的,到目前为止。但是,我将如何区分服务组件?LogService对象自然包含对BundleContext的引用,但是(看着LogService接口)ServiceReference必须由用户(实际记录某些内容的用户)本身提供吗?这对我来说似乎很脆弱。为什么框架在交付BundleContext时不能交付它?
当我在讨论它时,为什么OSGi规范使用详细logger.log(LogService.LOG_INFO,...)而不是准标准logger.info(...), logger.warn(..)等?是否有某些特定原因?