這是我第二次嘗試使用MyBatis創建集成測試。我嘗試了很多東西,但似乎沒有解決這個問題的方法。希望你們能幫助我。如何使用Arquillian(PART2)模擬MyBatis映射器接口?
In my previous question我試着寫一個集成測試來檢查我的rest API的輸出。其中的場景如下:rest API調用注入的EJB,它使用MyBatis執行一些SQL:rest api> ejb> mybatis。遺憾的是我沒能既不注入,也不是模擬的MyBatis映射器接口,所以我的測試不工作:(
現在我創造了另一個測試場景,但我在相同的情況下結束了 現在我的情況是瘋狂容易。我。有注入MyBatis的映射器的EJB,我想用的Arquillian嵌入式Glassfish的/似鯖水狼牙魚服務器中測試
這是我的例外:
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001408: Unsatisfied dependencies for type AccountDao with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private a.b.c.AppleBean.accountDao
at a.b.c.AppleBean.accountDao(AppleBean.java:0)
EJB:
@Stateless
public class AppleBean {
@Inject
private AccountDao accountDao;
public String say() {
return "Apple";
}
}
帳戶maper(DAO):
@Mapper
public interface AccountDao {
@Select("SELECT * FROM account WHERE id = #{id}")
@Results({
@Result(property = "email", column = "email", javaType = String.class),
@Result(property = "firstName", column = "first_name", javaType = String.class),
@Result(property = "lastName", column = "last_name", javaType = String.class),
})
Account findById(@Param("id") Long id);
}
我的測試類:
@RunWith(Arquillian.class)
public class AppleBeanTest {
@EJB
private AppleBean bean;
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap
.createFromZipFile(WebArchive.class, new File("target/war-demo-test-1.0.war"))
.addPackages(true, "a.b");
}
@Test
public void say() throws Exception {
assertNotNull(bean);
System.out.println(bean.say());
}
}
如果我評論在AppleBeanTest
兩行刪除refelence到MyBatis的映射器那麼我的測試工作正常。
I uploaded the source code to github as well.
SOLUTION
下面的類是從我的測試遺漏。 @blackwizard感謝你讓我走向正確的方向。
SessionFactoryProducer.java
@ApplicationScoped
public class SessionFactoryProducer {
@ApplicationScoped
@Produces
@SessionFactoryProvider
public SqlSessionFactory produce() throws Exception {
SqlSessionFactory sessionFactory;
try (Reader reader = Resources.getResourceAsReader("mybatis.xml")) {
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
// create sample table
//createTable(sessionFactory);
return sessionFactory;
}
private void createTable(final SqlSessionFactory manager) throws Exception {
try (SqlSession session = manager.openSession()) {
LOGGER.info("-> Initializing database...");
Connection conn = session.getConnection();
Reader reader = Resources.getResourceAsReader("create-table-postgresql.sql");
ScriptRunner runner = new ScriptRunner(conn);
runner.runScript(reader);
reader.close();
LOGGER.info("=> Database has been initialized properly.");
} catch (Exception ex) {
LOGGER.error("Error executing SQL Script...", ex);
}
}
}
Git項目被更新。
如果您嘗試在非測試環境中運行它,它會工作嗎? – blackwizard
是的,如果我將戰爭部署到payara服務器,它可以工作。 – zappee