我尝试测试具有注释@DependsOn的单例,其中我标记了必须在之前初始化的另一个单例。但是在测试中我不想加载它们,因为它为我的测试提供了很多无用的类。例如:
@Singleton
@DependsOn({"anotherSingleton1", "anotherSingleton2"...})
public class SomeSingleton {
... methods and logic...
}
以下是测试示例:
public class SomeSingletonIT extends Arquillian {
@Mock SomeClassInSingleton;
... another mocks...
@Inject
@InjectMocks
SomeSingleton instance;
@BeforeClass
public void initMocks() {
mocks logic
}
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
.addClasses(
SomeSingleton.class
)
.addAsLibraries(some Libs)
.addAsWebInfResource(EmptyAsset.INSTANCE,"beans.xml");
}
@Test
public void testGetProactiveSubjects() throws Exception {
System.out.println("***----------------------------------***");
assertNotNull(instance);
...some assertions...
System.out.println("***----------------------------------***");
}
}
我有一个例外,即arquillian在注释@DependsOn中没有看到单例类。但如果我将它们包含在测试档案中 - 我将不得不包括所有他们的依赖项。并嘲笑@ PostConstruct中的一些逻辑。那么......我如何禁用或模拟@DependsOn? 我使用带有野生动物管理容器的arquillian。
答案 0 :(得分:0)
我想到的一个想法是实现一个双重测试 - dummy object - 您可以在测试部署中替换它而不是部署真正的单例。这样可以避免在部署测试存档时添加大量依赖项和执行开销。