Tag: 测试

如何生成源代码来创建我正在调试的对象?

我的典型场景: 我处理的遗留代码有一个只有生产中的客户端才有的错误 我附加了一个调试器,并找出如何在给定输入的情况下在其系统上重现该问题。 但是,我不知道为什么错误发生了。 现在我想在我的本地系统上编写一个自动化测试来尝试重现然后修复bug 最后一步真的很难。 输入可能非常复杂并且有大量数据。 手动创建输入(例如: P p = new P(); p.setX(“x”); p.setY(“x”);想象这样做1000次以创建对象)非常繁琐且容易出错。 事实上你可能会注意到我刚给出的例子中有一个拼写错误。 是否有一种自动方式从调试器中的断点处获取字段并生成将创建该对象的源代码,以相同的方式填充? 我唯一想到的就是序列化这个输入(例如使用Xstream)。 我可以将其保存到文件中并在自动测试中将其读回。 这有一个主要问题:如果类以某种方式发生变化(例如:重命名了字段/ getter / setter名称),我将无法再反序列化该对象。 换句话说,测试非常脆弱。

用假会话测试控制器

我想为我的控制器编写测试: Result changeAction = callAction(controllers.routes.ref.Users.changePassword()); assertThat(status(changeAction)).isEqualTo(OK); 我有一个http状态代码 – 300。 这是正确的,因为我有一个名为Secured的类 package controllers; import play.mvc.*; import play.mvc.Http.*; public class Secured extends Security.Authenticator { @Override public String getUsername(Context ctx) { return ctx.session().get(“userId”); } @Override public Result onUnauthorized(Context ctx) { return redirect(routes.Users.login(ctx.request().uri())); } } 当我对控制器方法使用@Security.Authenticated(Secured.class)注释时,如果不存在与“userId”的会话,则重定向。 所以问题是,我怎么能假装会话? 我试过显然叫Controller.session(“usderId”, “2”); 并得到一个例外: java.lang.RuntimeException: There is no HTTP Context available from here. […]

有哪些方法可以测试依赖于静态方法的方法?

我需要测试一些依赖于Spring Security的安全相关类。 此代码使用静态的SecurityContextHolder.getContext() 。 如何在不设置整个安全上下文的情况下测试调用方法? 我们正在使用JUnit 4和Mockito。 Mockito在常见问题解答中非常清楚,静态方法不受支持。 还有其他选择吗? Spring Security案例的答案很好,但我正在寻找更普遍问题的解决方案。

在Spring Boot测试类上使用@WebMvcTest批注时出错

我已经按照这里描述的“测试Spring MVC切片”​​部分为Spring MVC控制器编写了一个测试类。 这个类看起来像这样: @RunWith(SpringRunner.class) @WebMvcTest(controllers=OurController.class) public class OurControllerTest { @Autowired private MockMvc mvc; @MockBean private OurRepository ourRepository; @Test public void testGetStuff() { // code removed } } 当我运行它时,我收到以下错误: MockHttpServletResponse: Status = 401 Error message = null Headers = {Cache-Control=[no-store], Pragma=[no-cache], WWW-Authenticate=[Bearer realm=”oauth2-resource”, error=”unauthorized”, error_description=”Full authentication is required to access this resource”], Content-Type=[application/json;charset=UTF-8], X-Content-Type-Options=[nosniff], X-XSS-Protection=[1; […]

测试Web应用程序

我是一名学生,我开发了一个基于JSP的Web应用程序。 现在我的教授建议我应该为我的网络应用程序做unit testing等测试。 任何人都可以建议我可以用什么其他测试来certificate我的应用程序的性能。 还有我可以研究如何进行unit testing的任何好资源,因为我以前从未做过任何测试。 谢谢!

如何在Intellij中运行单个黄瓜场景?

我有一个简单的问题 – 我想运行一个Cucumber场景,但我似乎无法找到任何选项/配置。 我有5-6个场景,我可以设置配置来运行所有测试,但是当我纠正一个场景时需要花费太多时间……

Java检测类是否是代理

是否可以检测类是否是代理 ( 动态 , cglib或其他 )? 让类A和B实现公共接口I 然后我需要定义一个例程的classEquals签名 public boolean classEquals(Class a, Class b); 这样,只有当a.equals(b)或Proxy(a).equals(b) ,它才会计算为true ,其中Proxy(a)表示类型A的动态代理(动态,cglib或其他)。 在@Jigar Joshi的帮助下,这是迄今为止的样子: public boolean classEquals(Class a, Class b) { if (Proxy.isProxyClass(a)) { return classEquals(a.getSuperclass(), b); } return a.equals(b); } 问题是它没有检测到例如CGLIB代理。

我想测试一个私有方法 – 我的设计有问题吗?

所以我对软件测试非常陌生,我正在考虑为我的一个应用程序添加几个测试。 我有一个公共方法addKeywords(),它沿途调用私有方法removeInvalidOperations()。 这种私有方法调用外部API并且是大约50行代码。 我认为这是一个有点复杂的方法,我想通过调用addKeyword()方法来测试它,而不必这样做。 但这似乎不可能(至少不是JUnit)。 我所看到的信息表明,测试私有方法的愿望可能是代码味道。 有些人认为这可能表明这应该被重构为一个单独的类并公之于众。 此外,还有一些建议是,如果您确实需要,则可以对生产代码进行编辑,例如更改私有方法的可见性。 我真的不明白为什么我当前的代码设计有问题,但也不喜欢编辑我的生产代码以满足我的测试需求的想法。 正如我所说 – 我对测试很新,所以任何帮助都非常感谢。 另外,如果有任何进一步的信息,我可以告诉我,以帮助解答。

@Value未通过Java配置的测试上下文设置

我有一个使用Java配置的Spring( @Configuration等)的Maven项目。 由@Value引用的属性存储在不同的位置,例如Tomcat的context.xml。 为了测试,我创建了一个.properties文件来为组件和服务提供一些值。 在我的JUnit测试中(使用弹簧测试上下文),这个.properties文件通过@PropertySource添加。 问题是不会从文件加载值,而是将值标识符设置为值,例如${someFlag:false} (因此除了String之外我得到ClassCastExceptions)。 此外,默认值将不会被设置,所以我认为,根本不会处理这些值。 我确信Spring找到了这个文件,因为当我更改@PropertySource的值时,我得到了一些FileNotFoundException。 尽管如此,我已经尝试了不同的变体来指向这个文件已经全部工作(通过重命名测试产生的FileNotFoundException): classpath:/test.properties(我的首选符号) /test.properties 文件:源/测试/资源/ test.properties 我也确定Spring本身可以工作,因为当我删除@Value ,测试中的类是按照预期在我的测试中通过@Autowired注入的。 在下方,您会发现问题场景尽可能地被剥离。 有关版本和依赖项,请参阅底部的pom.xml。 MyService.java package my.package.service; // Imports @Service public class MyService { @Value(“${someFlag:false}”) private Boolean someFlag; public boolean hasFlag() { return BooleanUtils.isTrue(someFlag); } } MyConfiguration.java @Configuration @ComponentScan(basePackages = {“my.package.service”}) public class MyConfiguration { } MyServiceComponentTest.java @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {MyTestConfiguration.class}) […]

如果我的测试中有validation,期望是多余的吗?

我对期望和validation的目的和差异感到困惑。 例如 @Tested FooServiceImpl fooService; @Injectable FooDao fooDao; @Test public void callsFooDaoDelete() throws Exception { new Expectations() {{ fooDao.delete(withEqual(1L)); times = 1; }}; fooService.delete(1L); new Verifications() {{ Long id; fooDao.delete(id = withCapture()); times = 1; Assert.assertEquals(1L, id); }}; } 首先,如果这个测试编写得不好,请告诉我。 第二,我的问题:期望部分对我来说似乎是多余的,我无法想出一个不会出现的例子。