近年来,我一直致力于使用Spring MVC框架编写用Java编写的Web应用程序。这些项目具有良好的测试覆盖率,JUnit&硒。但是,有两次Spring配置中的错误已通过测试过程。
在一个案例中,对controllerContext.xml中的父bean进行了更改,这也需要更改两个继承bean。但是所需的更改只针对两个继承bean中的一个。该错误仅在Web应用程序的一个小但关键的部分中可见。后来扩展了Selenium UA测试以直接在Web App中进行检查。在部署之前,但是当错误进入实时环境时已经完成了损坏。
在另一种情况下,设置数据格式所需的属性未通过applicationContext.xml正确注入。唯一可见的错误是从Web应用程序下载的生成报告的日期格式。很难用Selenium进行测试。
使用Spring MVC的一个优点是能够在JUnit测试中设置注入的对象(即模拟对象),但这并不能告诉您在应用程序运行时实际要注入的内容在现场环境中。
答案可能是集成测试,但是设置&在过去,运行集成测试已经证明是困难的...但这是另一个问题......
所以,我真的很想学习人们如何尝试捕捉Spring配置文件中可能出现的错误。
所以我的问题是:
在Spring配置中测试错误的最佳方法是什么?
答案 0 :(得分:5)
这个测试用例会做神奇的
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration(locations={"/server-application-context.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringConfigurationTest {
@Test
public void testSpringConfiguration() {
}
}
答案 1 :(得分:1)
@ContextConfiguration(..)
和@RunWith(SpringJUnit4ClassRunner.class)
这将加载整个上下文。您将需要一个虚拟@Test
方法,以便加载上下文。
答案 2 :(得分:1)
您描述的错误类型只有在有人认为/记得测试这些条件时才会被测试捕获:
在一个案例中,对controllerContext.xml中的父bean进行了更改,这也需要更改两个继承bean。但是所需的更改只针对两个继承bean中的一个。该错误仅在Web应用程序的一个小但关键的部分中可见。后来扩展了Selenium UA测试以直接在Web App中进行检查。在部署之前,但是当错误进入实时环境时已经完成了损坏。
在另一种情况下,设置数据格式所需的属性未通过applicationContext.xml正确注入。唯一可见的错误是从Web应用程序下载的生成报告的日期格式。很难用Selenium进行测试。
在这两种情况下,您都有一位开发人员在没有验证变更影响的地方没有错误的情况下进行了更改。如何在JUnit风格的测试中捕获这种类型的错误,而不依赖于进行更改的人明确地为他们犯的错误添加测试?换句话说,当您记得测试它们时,您只能捕获这些类型的错误。
就我个人而言,我认为捕获这类错误的最佳方法是更多类似Selenium的测试,它实际上会调用应用程序并断言正确的行为。
但是如果你的测试不知道要测试的正确行为,你就不会发现这样的错误 - 抓住错误需要你首先意识到需要捕获哪些错误。
换句话说 - 如果没有测试知道正确的值是什么,您就无法测试正确的值是否被注入。这些测试不会发现某人认为正确值是不正确的情况。