database - 在 Play Framework 中测试 Actors 但数据库已关闭

标签 database testing playframework-2.0 akka

我正在使用 Play 2.0.4,我正在为使用数据库的 Actor 做一个测试单元。 测试开始时很好,但是在给定的时刻与数据库的连接关闭并且正在运行的 actor 失败。

代码:

public class ActorTest extends Helpers {

    private FakeApplication app;
    private ActorSystem actorSystem;
    private ActorRef actorRef;
    private BankAccount account;

    @Before
    public void initTest() {

        Map<String, String> params = new HashMap<String, String>();
        params.put("db.default.driver", "com.mysql.jdbc.Driver");
        params.put("db.default.url", "mysql://root:XXXX@localhost/YYY");
        params.put("ebean.default", "models.*");


        app = fakeApplication(params);
        actorSystem = play.api.libs.concurrent.Akka.system(app.getWrappedApplication());
    }

    @Test
    public void updateAccountTransaction() {
        running(app, new Runnable() {
            @Override
            public void run() {

                account = BankAccount.find.byId(new Long(1));

                actorRef = actorSystem.actorOf(new Props(new UntypedActorFactory() {
                    @Override
                    public UntypedActor create() {
                        return new AccountTaskActor(account);
                    }
                }));

                Calendar fromDate = Calendar.getInstance();
                ....
                ....  
                Calendar toDate = Calendar.getInstance();

                final InputRangeDateMessage param = new InputRangeDateMessage(fromDate, toDate);

                junit.framework.Assert.assertNotNull(account);

                Future<Object> future = Patterns.ask(actorRef, param, 1000000);

                Promise<Object> sdf = Akka.asPromise(future);
                Promise<Result> r2 = sdf.map(new Function<Object, Result>() {
                    @Override
                    public Result apply(Object response) throws Throwable {
                        if (response instanceof ErrorMessage) {
                            ErrorMessage e = (ErrorMessage) response;
                            System.out.println("Error Message " + e.getErrorText());

                            junit.framework.Assert.assertEquals(e.getErrorCode(), -1);

                        } else if (response instanceof BankAccountMessage) {
                            BankAccount a = ((BankAccountMessage) response).getAccount();
                            System.out.println("BankAccount " + a.accountsLastUpdate);
                        }
                        return ok();
                    }
                });

                Result test2;
                test2 = async(r2);

            }
        });
    }
}

最佳答案

AFAIK,你必须等待你的 Promise 结束:

...
Result test2 = r2.get();

关于database - 在 Play Framework 中测试 Actors 但数据库已关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635939/

相关文章:

database - 在 SPSS 中删除案例的计算变量均值...多次

testing - 在关键字 "Run Keywords"内分配一个变量可能吗?

java - 如何使用 Spring dbunit 模拟数据库 View ?

laravel - 测试 Laravel Controller 的 try catch

java - Heroku Play框架2 sbt依赖项缓存

java - Play Framework 在请求开始时执行原始 sql?

scala - Play 2.0 Framework (scala) 中的异步结果

c# - 有没有一种方法可以对使用数据库系统的应用程序进行编程,而不需要在客户端计算机上安装数据库服务器

database - 无法创建 DB2 示例数据库

mysql - 实体 ID/实体类型术语/模式?