play framework 的 test

play test imap2

就进入了 play! 的 test 模式

这时用的配置是 application.conf 中带 test 前缀的,可以指定为与正试 app 不同

加入 test 的配置,也连到 oracle

%test.application.mode=dev
#%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.db.url=jdbc:oracle:thin:@localhost:1521:xe
%test.db.driver=oracle.jdbc.driver.OracleDriver
%test.db.user=imap
%test.db.pass=imap
%test.jpa.ddl=create
%test.mail.smtp=mock

进入 http://localhost:9000/@tests

这是 play!提供的测试界面,可以指定要测试的模块.

里面有一默认的单元测试叫 BasicTest,里面只有一个方法,叫 aVeryImportantThingToTest

代码在

gvim ./test/BasicTest.java

建立model

先建立一个 model

gvim ./model/User.java

內容

package models;
 
import java.util.*;
import javax.persistence.*;
 
import play.db.jpa.*;
 
@Entity
@Table(name="blog_user")
public class User extends Model {
 
    public String email;
    public String password;
    public String fullname;
    public boolean isAdmin;
    
    public User(String email, String password, String fullname) {
        this.email = email;
        this.password = password;
        this.fullname = fullname;
    }
}

测试

gvim ./test/BasicTest.java

删了没用的 aVeryImportantThingToTest

加入建立这个 model 的 test

import org.junit.*;
import java.util.*;
import play.test.*;
import models.*;

public class BasicTest extends UnitTest {
    @Test
        public void createAndRetrieveUser() {
            // Create a new user and save it
            new User("[email protected]", "secret", "Bob").save();

            // Retrieve the user with e-mail address [email protected]
            User bob = User.find("byEmail", "[email protected]").first();

            // Test 
            assertNotNull(bob);
            assertEquals("Bob", bob.fullname);
        }

}

其中

            assertNotNull(bob);

会查看 bob 是否为空

            assertEquals("Bob", bob.fullname);

会查看 bob.fullname 是否等于 “Bob”

来把 Bob 改为 Bib ,如果不等,会报这样的错

aVeryImportantThingToTest	 Ok	 1 ms
createAndRetrieveUser	Failure, expected:<B![pic](i)b> but was:<B![pic](o)b>
In /test/BasicTest.java, line 22 :
assertEquals("Bib", bob.fullname);

connect

model User.java 中,定义一个方法

public static User connect(String email, String password) {
    return find("byEmailAndPassword", email, password).first();
}