使用Java和JUnit在Play 2中测试表单

时间:2014-04-23 12:20:12

标签: java unit-testing playframework

所以,Play中的测试让我很头疼,我希望那里有人能解决我的问题。

我需要测试我的注册系统(以及许多其他内容),这当然涉及代表用户提交表单。

我的精简版控制器动作 - 添加()

public static Result add() {

    String email = form().bindFromRequest().get("email");
    String name = form().bindFromRequest().get("name");
    String password = form().bindFromRequest().get("password");
    String password_confirm = form().bindFromRequest().get("password-confirm");

    [stripped out code]

    if(!check){
        flash("error", "Not a valid email, please use the email address provided by your employer");
            return redirect(
                routes.UserController.registration()
        );
    }
    else {
        String passwordHash = BCrypt.hashpw(form().bindFromRequest().get("password"), BCrypt.gensalt());

        // Create unverified User
        User newUser = User.create(
            form().bindFromRequest().get("email"),
            form().bindFromRequest().get("name"),
            passwordHash
        );
        // Generate verification key
        String key = newUser.verification_key;
        // Send verification email
        sendVerificationLink(key);

        flash("success", "Thanks for registering! We have sent you an email with a verification link.");
        return redirect(
            routes.Application.login()
        );
    }

这是我写的JUnit测试。

@Test
public void registerTest() {
    running(fakeApplication(), new Runnable() {
        public void run() {
            String registeredUserName = "bob";
            String registeredUserEmail = "bob@gmail.ac.uk";
            String registeredUserPass = "secret";
            String registeredUserPassConfirm = "secret";

            Map<String, String> userData = new HashMap<String, String>();
            userData.put("name", registeredUserName);
            userData.put("email", registeredUserEmail);
            userData.put("password", registeredUserPass);
            userData.put("passwordconfirm", registeredUserPassConfirm);

            Result r = callAction(routes.ref.UserController.add(), fakeRequest()
                    .withFormUrlEncodedBody(Form.form(User.class).bind(userData).data()));       

            assertEquals(r, 200);
        }
    });
}

在HashMap中给出适当的正确细节,在我看来,r应该返回OK还是200?

但是,我得到以下内容......“预计:play.test.Helpers $ 1 @ 29cd761a但是:&lt; 200&gt;”

这是什么“play.test.Helpers$1@29cd761a”?它看起来像引用一个对象或内存地址,但我不知道为什么??

如果这个含糊不清,请说明一下,我会详细说明。

提前致谢

1 个答案:

答案 0 :(得分:1)

哟!

怀疑它!

对于其他任何有瞬间脑屁的人......使用status()方法来阅读返回的结果!

Result r = callAction(routes.ref.UserController.add(), fakeRequest()
           .withFormUrlEncodedBody(Form.form(User.class).bind(userData).data()));  

assertEquals(200, status(r));