小编Biv*_*vas的帖子

单元测试异步scala代码

尝试并发执行我想知道如何实际测试它.执行流程具有副作用,并且创建期货以包装独立的执行/处理.

一直在寻找一些关于如何正确单元测试以下场景的好例子(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,简单地抛出值的方法)

注意我熟悉演员和测试演员,但考虑到上面的代码,我想知道什么应该是最合适的方法(包括重构)

编辑 …

unit-testing asynchronous scala future

6
推荐指数
1
解决办法
1158
查看次数

AnnotationConfigApplicationContext和父上下文

我正试图用一个问题来定义一个上下文层次结构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; …

java spring annotations

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

annotations ×1

asynchronous ×1

future ×1

java ×1

scala ×1

spring ×1

unit-testing ×1