适合单元测试的类的一般结构

时间:2011-08-18 10:03:23

标签: java unit-testing playframework

我正在开发一款游戏应用程序,希望在对项目进行太多深入研究之前提高我的测试覆盖率。 到目前为止,我在模型层上有很好的测试覆盖率,但是控制器往往会在其中获得大量逻辑(累积内容并根据模型结果进行计算)。

有没有人建议如何构建我的应用程序,以便所有部分都可以轻松测试?我当然可以重构控制器的所有逻辑,只为每个控制器方法调用一个不同的类,然后只使用控制器中的render方法,但它看起来有点激烈。

有一种方法可以在控制器中运行方法后查看结果,例如

public static void controllerMethod(String a){
    String result = doSomething();
    String calcResult = calculateSomething(a);
    render(result, calcResult)
}

如何在此方法之后测试预期结果和calcResult是否是我想要的单位测试?

游戏网站上的所有示例都是关于测试模型层的。我知道我可以对控制器运行功能测试,但对于我想要测试的内容,这有点浅薄。

如果您对如何构建我的课程有任何建议,以便有一个易于测试的应用程序,请告诉我。

2 个答案:

答案 0 :(得分:1)

控制器任务应该(主要)控制应用程序的流程(下一页显示哪个页面)。为此,您可以在Play中使用selenium tests

如果您发现自己在控制器中添加了大量登录信息,请将其移至相关模型中的方法(如果适用)或创建管理复杂零件的中间层(ala服务)。它们比控制器更容易测试,并且允许您在多个控制器上重用逻辑(例如,通过REST API调用的浏览器访问)

答案 1 :(得分:0)

“如何在此方法之后测试预期结果和calcResult是我希望它在单元测试中的用途?” 不要对controllerMethod(Sting a)运行JUnit测试,而是针对doSomething()和calculateSomething(a)运行两个JUnit测试。由于两者都返回一个字符串,这是直截了当的。

编辑。还要考虑使用与“生产”代码相同的包名创建一个单独的测试项目,因为它可以测试包范围的方法。