gpt4 book ai didi

java - 依赖注入(inject)在 Play Framework 2.4.x 的模型或测试中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:08:39 27 4
gpt4 key购买 nike

我正在尝试为我的 Play Framework 2.4.6 应用程序编写一些单元测试。我需要 WS 用于我的目的测试。但是,当我使用文档的方法注入(inject) WS 时,如果在测试或模型中使用,我最终会得到一个空指针。但是,如果我将它安装到我的一个 Controller 中,注入(inject)将完美运行。

这是我的测试:

import org.junit.Test;
import play.test.WithServer;
import play.libs.ws.*;
import javax.inject.Inject;
import static play.test.Helpers.running;
import static play.test.Helpers.testServer;

public class UserProfileTests extends WithServer {
@Inject
WSClient ws;

@Test
public void demographicTest() {

System.out.println(ws.toString()); //null pointer exception

running(testServer(3333), () -> {
System.out.println(ws.toString()); //null pointer exception
});

}
}

这是运行激活器测试时的控制台输出

[error] Test UserProfileTests.demographicTest failed: java.lang.NullPointerException: null, took 5.291 sec
[error] at UserProfileTests.demographicTest(UserProfileTests.java:15)
[error] ...
[error] Failed: Total 4, Failed 1, Errors 0, Passed 3
[error] Failed tests:
[error] UserProfileTests
[error] (test:test) sbt.TestsFailedException: Tests unsuccessful
[error] Total time: 9 s, completed Jan 21, 2016 11:54:49 AM

我确定我只是从根本上误解了有关依赖注入(inject)或系统工作方式的一些事情。任何帮助将不胜感激。

最佳答案

由于测试应该只专注于一个特定的 scanario/对象,我认为您不需要担心如何为您的测试进行依赖注入(inject),而只需实例化您需要的东西。下面是使用应用程序 Injector 进行实例化的方法:

import org.junit.Before;
import org.junit.Test;
import play.libs.ws.WSClient;
import play.test.WithServer;

public class UserProfileTests extends WithServer {

private WSClient ws;

@Before
public void injectWs() {
ws = app.injector().instanceOf(WSClient.class);
}

@Test
public void demographicTest() {
System.out.println(ws);
}
}

但是,当然,您也可以手动实例化 ws 或根据需要模拟它。

关于模型,它们的生命周期不是由 Guice 处理的,因此没有直接的方法在模型上进行依赖注入(inject)。你总能找到办法做到这一点,但你应该这样做吗?如果尝试从数据库加载 100 个对象,然后必须在每个对象中注入(inject)依赖项,会发生什么情况?

除了(可能的)性能问题,也许您还违反了 Single Responsibility Principle在这里,您的模型正在做很多工作。

关于java - 依赖注入(inject)在 Play Framework 2.4.x 的模型或测试中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34932080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com