尝试并发执行我想知道如何实际测试它.执行流程具有副作用,并且创建期货以包装独立的执行/处理.
一直在寻找一些关于如何正确单元测试以下场景的好例子(foo以及bar我想测试的方法):
场景#1
def foo : Unit = {
Future { doSomething }
Future { doSomethingElse }
}
private def doSomething : Unit = serviceCall1
private def doSomethingElse : Unit = serviceCall2
情景动机
foo立即返回,但调用2个期货执行单独的任务(例如,将分析和存储记录保存到DB).这些服务调用可以被模拟,但我试图测试的是,一旦我将它们包装在Futures中,这两个服务都被调用
场景#2
def bar : Unit = {
val futureX = doAsyncX
val futureY = doAsyncY
for {
x <- futureX
y <- futureY
} yield {
noOp(x, y)
}
}
情景动机
从可以同时执行的长时间运行计算开始(例如,获取总访问者数量并将常用User-Agent标题添加到我们的网站).将结果合并到其他一些操作中(在这种情况下Unit,简单地抛出值的方法)
注意我熟悉演员和测试演员,但考虑到上面的代码,我想知道什么应该是最合适的方法(包括重构)
编辑 …
我正试图用一个问题来定义一个上下文层次结构AnnotationConfigApplicationContext.
问题是在内部定义模块上下文beanRefContext.xml并使用另一个上下文(基于XML/Annotated)设置'parent'属性.
例:
模块A中的beanRefContext.xml
<bean id="moduleA_ApplicationContext"
class="org.springframework.context.support.ClassPathXmlApplicationContext">
<property name="configLocations">
<list>
<value>classpath:db-context.xml</value>
</list>
</property>
</bean>
DB-的context.xml
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MySQL;TRACE_LEVEL_SYSTEM_OUT=2"/>
<!-- Hibernate Session Factory -->
<bean name="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="useTransactionAwareDataSource" value="true"/>
<property name="packagesToScan">
<list>
<value>com.example.model</value>
</list>
</property>
<property name="hibernateProperties">
<!-- hibernate props -->
</property>
</bean>
模块B中的beanRefContext.xml
<bean id="moduleB_ApplicationContext"
class="org.springframework.context.annotation.AnnotationConfigApplicationContext" >
<property name="parent" ref="moduleA_ApplicationContext"/>
<constructor-arg>
<list>
<value>com.example.dao</value>
</list>
</constructor-arg>
</bean>
FooHibernateDao
class FooHibernateDao implements FooDao {
@Autowired
@Qualifier("sessionFactory")
private SessionFactory sessionsFactory; …