因此,我想对一些不同的Dao方法使用一个通用测试。在Dao内部,我实现了与实体无关的save功能,因此我认为最好也使测试实体独立。目前,我有一个jmockit测试,它是与Spring一起autowired的。
@Injectable
public EntityManager em;
@Tested
SyncClaimDao syncClaimDao = new SyncClaimDaoImpl();
@Before
public void setUp() {
Deencapsulation.setField(syncClaimDao, "em", em);
}
private void testSaveEntity (Class T) {
// Existing claim happy path
new Expectations() {
{
em.contains(any); result = true;
em.merge(any);
}
};
if (T.isInstance(SyncClaimEntity.class)) {
Assert.assertTrue(syncClaimDao.saveClaim(new SyncClaimEntity()));
} else if (...) {...}
}
@Test
public void testSaveClaim() {
testSaveEntity(SyncClaimEntity.class);
}
Syncclaimdaoimpl
@Override
public boolean saveClaim(SyncClaimEntity claim) {
return saveEntity(claim);
}
private boolean saveEntity(Object entity) {
boolean isPersisted = false;
try {
isPersisted = em.contains(entity);
if (isPersisted) {
em.merge(entity);
} else {
em.persist(entity);
em.flush();
isPersisted = true;
}
logger.debug("Persisting " + entity.getClass().getSimpleName() + ": " + entity.toString());
}
catch (NullPointerException ex) {
...
}
catch (IllegalArgumentException ex) {
...
}
return isPersisted;
}
mockit.internal.MissingInvocation: Missing invocation of:
javax.persistence.EntityManager#contains(Object)
with arguments: any Object
on mock instance: javax.persistence.$Impl_EntityManager@44022631
at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
... 4 more
Caused by: Missing invocation
at [redacted].dal.dao.SyncClaimDaoImplTest$1.<init>(SyncClaimDaoImplTest.java:48)
at [redacted].dal.dao.SyncClaimDaoImplTest.testSaveEntity(SyncClaimDaoImplTest.java:46)
at [redacted].dal.dao.SyncClaimDaoImplTest.testSaveClaim(SyncClaimDaoImplTest.java:67)
... 10 more
@Test
public void testSaveClaim() {
new Expectations() {
{
em.contains(any); result = true;
em.merge(any);
}
};
Assert.assertTrue(syncClaimDao.saveClaim(new SyncClaimEntity()));
我现在看到了错误:t.isinstance(SyncClaimentity.class)
。类#isinstance(Object)
方法应该用类的实例调用,而不是用类本身调用;因此,它总是返回false,因为SyncClaimEntity.class
显然不是SyncClaimEntity
的实例。
我有一个maven项目,其中jmockit 1.18用于嘲笑,surefire用于运行测试套件,Jacoco用于测量代码覆盖率。 当我尝试将jmockit升级到1.45版时,它在初始化测试套件运行程序VM时出错。但是,当javaagent作为argline参数显式传递时,测试就会执行。 有人能告诉我是否有办法禁用jmockit检测或代理初始化吗?
我正在使用一个用Groovy编写的Spock测试来测试一些Java代码。我使用JMockit来模拟java代码中的方法,因为Spock只处理模拟Groovy类。我遇到了一个问题,在测试之间存在一个JMockit。这样的模拟实例应该只存在于测试中(根据JMockit文档),但这不起作用,我想这是因为它没有使用JMockit测试运行器,而是使用了Spock测试运行器。 问题 有什么方法可以手动移除JM
我使用Gradle(里程碑8a)在IBM J9 JVM的项目上运行JUnit测试,根据“用JMockit运行测试”,这需要将参数传递给JVM。然而,JMockit并没有注入mocked参数,这导致我的测试以“method(foo)应该没有参数”而失败,测试在Eclipse的HotSpot JVM上运行良好。 我扩展了任务,以查找JAR并将参数添加到中,如下所示: 的输出确认正在使用参数: 我很确定
问题内容: 以下是有关如何使Java通用类将单个项目附加到数组的代码段。如何使appendToArray成为静态方法。在方法签名中添加static会导致编译错误。 问题答案: 您唯一可以做的就是将您的签名更改为 重要细节: 返回值之前的泛型表达式始终会引入(声明)新的泛型类型变量。 另外,类型()和静态方法()之间的类型变量永远不会相互干扰。 因此,这意味着什么:如果方法不是,则我的答案将隐藏。A
注意:我已经做了一个搜索和阅读了各种博客,但找不到一个例子,与我正在尝试做什么。 它似乎不喜欢我的某个测试成员字段是私有的,但没有告诉我它对哪个字段有问题。我见过的单元测试的所有例子,唯一公开的一定是ExpectedException规则。
问题: 当我启动我的测试jetty-server并制作我的控制器模型时,模型不起作用!我认为原因是不同的ClassLoader:jMockit-AppClassLoader,jetty-WebAppClassLoader。 问题: 您应该看到JettyDeploymentIntegrationUnitTestCase.RequestWebApp方法:在这些方法中,我们使mock不起作用。 您可以检