在本文中,我们将为您详细介绍在JUnit测试中处理System.exit的相关知识,并且为您解答关于0的疑问,此外,我们还会提供一些关于java–在JUnit测试中模拟对象–最佳实践?、java–在J
在本文中,我们将为您详细介绍在JUnit测试中处理System.exit的相关知识,并且为您解答关于0的疑问,此外,我们还会提供一些关于java – 在JUnit测试中模拟对象 – 最佳实践?、java – 在JUnit测试中自动装配Spring服务、java – 在JUnit测试中重复代码、java – 如何在JUnit测试中初始化数据的有用信息。
本文目录一览:- 在JUnit测试中处理System.exit(0)(junit报错怎么看)
- java – 在JUnit测试中模拟对象 – 最佳实践?
- java – 在JUnit测试中自动装配Spring服务
- java – 在JUnit测试中重复代码
- java – 如何在JUnit测试中初始化数据
在JUnit测试中处理System.exit(0)(junit报错怎么看)
我正在为现有的Java
Swing应用程序执行一些测试,以便可以安全地重构和扩展代码而不会破坏任何内容。我从JUnit中的一些单元测试开始,因为这似乎是最简单的入门方法,但是现在我的首要任务是创建一些端到端测试,以对整个应用程序进行练习。
我将每种测试方法放在一个单独的测试用例中,并fork="yes"
在Ant的junit
任务中使用该选项,从而在每个测试中重新启动应用程序。但是,我想作为测试实现的一些用例涉及用户退出应用程序,这导致调用System.exit(0)的方法之一。JUnit将此视为错误:junit.framework.AssertionFailedError:Forked Java VM exited abnormally
。
有没有办法告诉JUnit以零返回码退出实际上是可以的?
答案1
小编典典我该如何处理是安装一个安全管理器,该安全管理器在调用System.exit时会引发异常。然后是捕获异常且不会使测试失败的代码。
public class NoExitSecurityManager extends java.rmi.RMISecurityManager{ private final SecurityManager parent; public NoExitSecurityManager(final SecurityManager manager) { parent = manager; } public void checkExit(int status) { throw new AttemptToExitException(status); } public void checkPermission(Permission perm) { }}
然后在代码中,如下所示:
catch(final Throwable ex){ final Throwable cause; if(ex.getCause() == null) { cause = ex; } else { cause = ex.getCause(); } if(cause instanceof AttemptToExitException) { status = ((AttemptToExitException)cause).getStatus(); } else { throw cause; }}assertEquals("System.exit must be called with the value of " + expectedStatus, expectedStatus, status);
java – 在JUnit测试中模拟对象 – 最佳实践?
那你觉得这个话题怎么样?在这种情况下,您是在嘲笑您的对象还是为什么不这样做?
解决方法
用于测试的对象工厂可能假定使用stubbed方法制作对象,而mocking框架本质上是用于测试的通用对象工厂.但是,嘲讽提供了比存根更多的东西 – Martin Fowler在这里详细介绍的一个区别:http://martinfowler.com/articles/mocksArentStubs.html.
如果你觉得嘲讽很难,而且你也发现你在做很多事情,那么这是TDD的典型例子,告诉你你的设计可以改进.
java – 在JUnit测试中自动装配Spring服务
我有以下Spring服务:
@Service
public class MyService {
public List
和配置类:
@Configuration
public static class MyApplicationContext {
@Bean
public Filter filter(ApplicationContext context) {
return new Filter();
}
}
现在,我想创建一个单元测试来检查getIds方法是否返回正确的结果.我创建了以下JUnit测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=MyApplicationContext.class,loader=AnnotationConfigContextLoader.class)
public class AppTest
{
@Autowired
Filter filter;
@Autowired
MyService service;
}
编译器为Filter类找到正确的bean,但是为服务变量抛出“BeanCreationException:Could not autowire field”异常.我尝试将服务类添加到ContextConfiguration.classes,但随后编译器抛出“IllegalStateException:无法加载ApplicationContext”异常.
如何在ContextConfiguration中包含MyService?
最佳答案
将以下注释添加到MyApplicationContext以获取要扫描的服务@ComponentScan(“myservice.package.name”)
java – 在JUnit测试中重复代码
@Test public void shouldRemoveAllDrivingRecords() { Duration duration1 = new Duration(1,30,45); Duration duration2 = new Duration(2,50,12); DrivingRecord drivingRecord1 = new DrivingRecord(230.0,duration1,"This was a long trip"); DrivingRecord drivingRecord2 = new DrivingRecord(300.0,duration2,"This trip is even longer."); drivingLog.addDrivingRecord(drivingRecord1); drivingLog.addDrivingRecord(drivingRecord2); drivingLog.removeAllDrivingLogs(); assertEquals(0,drivingLog.numberOfdrivingRecords()); } @Test public void shouldSumThedistanceDriven() { Duration duration1 = new Duration(1,"This trip is even longer."); drivingLog.addDrivingRecord(drivingRecord1); drivingLog.addDrivingRecord(drivingRecord2); double expecteddistanceDriven = drivingRecord1.getdistance() + drivingRecord2.getdistance(); double totaldistanceDriven = drivingLog.getdistanceDriven(); assertEquals(expecteddistanceDriven,totaldistanceDriven,0.1); }
解决方法
java – 如何在JUnit测试中初始化数据
压力测试类似于:读取实体 – 更新实体 – 保存 – 再次读取和比较.但是为了构建测试,我需要在数据库中使用一些测试数据,因此我需要在测试之前创建这些数据并在之后删除它.所需的流程:创建测试数据 – 在多个线程中运行测试 – 在所有线程完成执行后删除测试数据.有很多测试数据,所以使用一些测试转储sql文件来获取它会好得多.所以我需要的是:将数据从文件加载到数据库 – 执行压力测试 – 删除所有加载的数据.
我使用SchemaExport加载数据.我面临以下例外:
org.hibernate.HibernateException: No local DataSource found for configuration - 'dataSource' property must be set on LocalSessionfactorybean at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.configure(LocalDataSourceConnectionProvider.java:49) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56) at org.hibernate.tool.hbm2ddl.ManagedProviderConnectionHelper.prepare(ManagedProviderConnectionHelper.java:27) at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:180) at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:133) .................
这是我的SessionFactory bean的定义:
<bean id="sessionFactory"https://www.jb51.cc/tag/factorybean/" target="_blank">factorybean"> <property name="dataSource" ref="dataSource"/> <property name="hibernateProperties"> <value> hibernate.dialect=${hibernate.dialect} hibernate.show.sql=${hibernate.show.sql} </value> </property> <property name="annotatedClasses"> <list> ... my classes ... </list> </property> </bean>
我按以下方式启动测试:
@BeforeClass public static void createTestData() throws AccessDeniedException,AccountException,sqlException { ClasspathXmlApplicationContext appCtx = new ClasspathXmlApplicationContext("classpath:/applicationContext_test.xml"); AnnotationSessionfactorybean sessionfactorybean = (AnnotationSessionfactorybean) appCtx.getBean("sessionFactory"); org.hibernate.cfg.Configuration configuration = sessionfactorybean.getConfiguration(); SchemaExport schemaExport = new SchemaExport(configuration); schemaExport.drop(false,true); schemaExport.create(false,true); if (schemaExport.getExceptions().size() > 0) { for (Object exception : schemaExport.getExceptions()) { if (exception instanceof Throwable) { ((Throwable) exception).printstacktrace(); } } throw new IllegalStateException(); } }
我提到我需要进行负载测试以明确我不能在测试块中包含数据初始化.
我有两个问题:
1)如何在加载测试之前初始化数据并在之后将其删除?
2)我是正确的吗?或者也许我应该转用另一种技术进行压力测试?
解决方法
问候,
我们今天的关于在JUnit测试中处理System.exit和0的分享已经告一段落,感谢您的关注,如果您想了解更多关于java – 在JUnit测试中模拟对象 – 最佳实践?、java – 在JUnit测试中自动装配Spring服务、java – 在JUnit测试中重复代码、java – 如何在JUnit测试中初始化数据的相关信息,请在本站查询。
本文标签: