Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为委托模型设计构建端到端测试?_Java_Model View Controller_Testing_Delegates - Fatal编程技术网

Java 如何为委托模型设计构建端到端测试?

Java 如何为委托模型设计构建端到端测试?,java,model-view-controller,testing,delegates,Java,Model View Controller,Testing,Delegates,我刚刚遇到了代理模型设计(与MVC相反),并想尝试一下,最近还一直在学习GOOS风格的TDD开发。所以我希望我的行走骨骼测试看起来像这样:(我使用的是JUnit) 正如上面的评论所述,我的问题是我不确定如何从委托中正确生成用户事件。也许我对设计模式如何工作的理解是错误的,但是委托应该封装视图和控制器-我必须让视图从委托内部向控制器触发事件,但是这种交互应该是“秘密的” 感谢您的任何意见。您的行走骨骼测试应该尽可能接近端到端。如果可以的话,测试应该从GUI一直到web服务或数据库层。这验证了一切都

我刚刚遇到了代理模型设计(与MVC相反),并想尝试一下,最近还一直在学习GOOS风格的TDD开发。所以我希望我的行走骨骼测试看起来像这样:(我使用的是JUnit)

正如上面的评论所述,我的问题是我不确定如何从委托中正确生成用户事件。也许我对设计模式如何工作的理解是错误的,但是委托应该封装视图和控制器-我必须让视图从委托内部向控制器触发事件,但是这种交互应该是“秘密的”


感谢您的任何意见。

您的行走骨骼测试应该尽可能接近端到端。如果可以的话,测试应该从GUI一直到web服务或数据库层。这验证了一切都可以正确连接,并且您可以自动化部署并在生产中运行

然而,使用实际的web服务和数据库进行的测试可能太慢或太脆弱,无法自动化。在这种情况下,您可以使用依赖项注入在这些层下面进行测试

为了测试GUI,您可以使用GUI测试框架通过GUI本身进行测试(这就是他们在GOOS中所做的)。如果您使用的是Swing,我推荐。另一种更可靠并允许快速验收测试的方法是在GUI层下进行测试。但对于这一点,您应该使用MVP或MVVM而不是委托模型

我仍然停留在如何正确地以编程方式提出 用户事件。例如,用户通过UI将一行添加到表中, 最后我断言模型中的行数等于1。 我必须打破委托的封装才能这样做吗

您必须:打破encapulation,使用MVP/MVVM等模式,使您可以在视图下进行测试,或者使用FEST通过GUI进行测试。我建议使用FEST来引发事件,方法是让它自动单击组件并验证JTable是否具有给定数量的行。FEST测试相当可靠,尽管速度很慢,所以不应该用它编写单元测试


<>如果您的应用程序增长到一个合适的大小(>3000 LOC),您可以考虑重构到MVP/MVVM,因为您将从代码重用和更快/可靠的端到端测试获得足够的好处来证明复杂性。您的FEST测试和单元测试(在模型上)不应该在重构期间中断,这将帮助您安全地重构。当您的presenter/view模型是一个单独的类时,您可以直接调用这些类上的用户事件,并验证(使用模拟)/断言是否添加了额外的表行。

您的行走骨架测试应该尽可能接近端到端。如果可以的话,测试应该从GUI一直到web服务或数据库层。这验证了一切都可以正确连接,并且您可以自动化部署并在生产中运行

然而,使用实际的web服务和数据库进行的测试可能太慢或太脆弱,无法自动化。在这种情况下,您可以使用依赖项注入在这些层下面进行测试

为了测试GUI,您可以使用GUI测试框架通过GUI本身进行测试(这就是他们在GOOS中所做的)。如果您使用的是Swing,我推荐。另一种更可靠并允许快速验收测试的方法是在GUI层下进行测试。但对于这一点,您应该使用MVP或MVVM而不是委托模型

我仍然停留在如何正确地以编程方式提出 用户事件。例如,用户通过UI将一行添加到表中, 最后我断言模型中的行数等于1。 我必须打破委托的封装才能这样做吗

您必须:打破encapulation,使用MVP/MVVM等模式,使您可以在视图下进行测试,或者使用FEST通过GUI进行测试。我建议使用FEST来引发事件,方法是让它自动单击组件并验证JTable是否具有给定数量的行。FEST测试相当可靠,尽管速度很慢,所以不应该用它编写单元测试


<>如果您的应用程序增长到一个合适的大小(>3000 LOC),您可以考虑重构到MVP/MVVM,因为您将从代码重用和更快/可靠的端到端测试获得足够的好处来证明复杂性。您的FEST测试和单元测试(在模型上)不应该在重构期间中断,这将帮助您安全地重构。当您的presenter/view模型是一个单独的类时,您可以直接调用它们上的用户事件,并验证(使用mock)/断言是否添加了其他表行。

Hmm。。。这是一个独立的应用程序,因此没有web服务。我没有使用数据库来存储数据。我将阅读有关FEST的文章,它对于gui测试可能很好然而,我仍然停留在如何正确地以编程方式引发用户事件上。例如,用户通过UI将一行添加到表中,最后我断言模型中的行数等于1。我是否必须破坏委托的封装才能这样做?好的-我将尝试FEST,稍后再次响应。如果有效,我会将此标记为正确答案。:)我假设我实际上必须为FEST编写一个基本的UI,以便与之交互(而不是仅仅编写一些基本的过程代码,如
raiseadrowevent()
)-但我会找到答案的。看起来FEST对于UI测试非常有效-我仍然在努力围绕委托模型范式进行思考。我想现在我会回到MVC,获得更多关于TDD的经验,然后再看看代理模型。谢谢你的帮助。:)隐马尔可夫模型。。。这是一个独立的应用程序,因此没有web服务。我没有使用数据库来存储数据。我将阅读有关FEST的文章,它对于gui测试可能很好然而,我仍然坚持下去
@Test
public void userGeneratesEvent_DNotifiesM_MNotifiesDOfUpdatedData_DGetsNewDataFromM() {
    Model model = new Model();
    Delegate delegate = new Delegate(model);
    model.addListener(delegate);
    // Not sure how to "generate the user event" here
    assert( ... );
}