0
,並試圖單元測試是在我的要求,這是與下面的消息沒有設置頁眉創造PlayFramework測試環境:不使用我使用PlayFramework 2.5嘲笑
Test controllers.ApplicationTest.knownUnregister failed: java.lang.RuntimeException: There is no HTTP Context available from here.
我的測試類是:
package controllers;
import java.util.Optional;
import org.junit.Test;
import play.mvc.Http;
import play.mvc.Result;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
public class MyAppTest {
@Test public void knownUnregister() {
MyApp app = new MyApp();
Result res = app.registerEnv();
Optional<String> url = res.header(Http.HeaderNames.LOCATION);
assertTrue(url.isPresent());
}
}
的來源是:
package controllers;
import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.Http;
public class MyApp extends Controller {
public Result registerEnv() {
response().setHeader(Http.HeaderNames.LOCATION, "/env/foo");
return created("foo");
}
}
我看到Play framework 2.2.1: Create Http.Context for tests,它嘲笑RequestHeader對象。這樣做會導致測試失敗並出現空指針異常,可能是因爲模擬對象爲標題映射返回空映射。
看着Mockito文檔,在我想清楚如何正確設置模擬之前,我看到了文檔中不會模擬不屬於您的代碼的部分,並且如果代碼關心模擬返回的內容,那麼測試可能存在問題。
因爲我關心真正的結果,並設置了正確的標題,所以它看起來像創造一個真實的,而不是嘲弄的,上下文就是我想在這裏做的。
有沒有辦法做到這一點?
沒有模擬的唯一方法是有一個集成測試,而不是單元測試。 – marcospereira