#测试应用程序
测试资源文件必须放在应用的test目录下。你可以通过play控制台使用test和test-only来执行测试任务。
1.使用JUnit
Play2.0默认使用JUnit进行测试。
package test;
import org.junit.*;
import play.mvc.*;
import play.test.*;
import play.libs.F.*;
import static play.test.Helpers.*;
import static org.fest.assertions.Assertions.*;
public class SimpleTest {
@Test
public void simpleCheck() {
int a = 1 + 1;
assertThat(a).isEqualTo(2);
}
...
2.在伪应用程序中运行
如果你需要测试的代码依赖一个运行中的程序,你可以在fly上轻松的创建一个FakeApplication。
@Test
public void findById() {
running(fakeApplication(), new Runnable() {
public void run() {
Computer macintosh = Computer.find.byId(21l);
assertThat(macintosh.name).isEqualTo("Macintosh");
assertThat(formatted(macintosh.introduced)).isEqualTo("1984-01-24");
}
});
}
你也快传递(或重写)另外的应用程序配置,或者mock任何插件。例如使用默认的内存数据库创建一个FakeApplication。
fakeApplication(inMemoryDatabase())
#编写功能测试
1.测试模板
因为模板是个标准的Scala函数,你可以在test中执行它并检查结果。
@Test
public void renderTemplate() {
Content html = views.html.index.render("Coco");
assertThat(contentType(html)).isEqualTo("text/html");
assertThat(contentAsString(html)).contains("Coco");
}
2.测试你的Controllers
通过检索路由,你可以得到一个action的引用,如controllers.routes.ref.Application.index。然后你可以调用它:
@Test
public void callIndex() {
Result result = callAction(controllers.routes.ref.Application.index("Kiki"));
assertThat(status(result)).isEqualTo(OK);
assertThat(contentType(result)).isEqualTo("text/html");
assertThat(charset(result)).isEqualTo("utf-8");
assertThat(contentAsString(result)).contains("Hello Kiki");
}
3.测试路由
不同于自己调用action,你可以让路由这么做:
@Test
public void badRoute() {
Result result = routeAndCall(fakeRequest(GET, "/xx/Kiki"));
assertThat(result).isNull();
}
4.启动真的Http服务器
有时候你想测试真的Http栈模型。那么你可以启动一个测试服务器:
@Test
public void testInServer() {
running(testServer(3333), new Callback0() {
public void invoke() {
assertThat(
WS.url("http://localhost:3333").get().get().status
).isEqualTo(OK);
}
});
}
4.在web浏览器中测试
如果你想在web浏览器中测试你的应用,你可以使用selenum WebDriver。Play会为你启动WebDriver,并且
用FluentLenium提供的简便API包装它。
@Test
public void runInBrowser() {
running(testServer(3333), HTMLUNIT, new Callback<TestBrowser>() {
public void invoke(TestBrowser browser) {
browser.goTo("http://localhost:3333");
assertThat(browser.$("#title").getTexts().get(0)).isEqualTo("Hello Guest");
browser.$("a").click();
assertThat(browser.url()).isEqualTo("http://localhost:3333/Coco");
assertThat(browser.$("#title", 0).getText()).isEqualTo("Hello Coco");
}
});
}