首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试

单元测试
EN

Stack Overflow用户
提问于 2016-08-30 00:22:48
回答 1查看 339关注 0票数 0

当试图为一个类编写测试用例时,其功能更多地处理锅炉板代码,而不是业务逻辑。我开始怀疑,对于这个类来说,单元测试是否真的值得。但是,在使用TDD时,建议我们为添加的任何逻辑编写测试。

例如,下面的类只使用DI注入依赖项并获取配置参数来设置应用程序的运行。除了单元测试--如果依赖项被正确注入,或者在运行完成时调用了破坏(这将是对java CDI框架的单元测试,而不是我自己的代码)--我还可以进行什么单元测试?

代码语言:javascript
复制
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject;

@Singleton
@Startup
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class PipsAlprConnectionRunner {
    @Inject
    private PipsAlprConfiguration config;

    @Inject
    private PipsAlprConnector connector;

    @Inject
    private Scheduler scheduler;

    @Inject
    @PipsAlprAdapterService
    private ServiceStatus status;

    private Timer connectorTimer = null;

    @PostConstruct
    public void initialized() {
        status.started();
        connectorTimer = scheduler.schedule(connector, 0,
                1000 * config.getPollPeriodSeconds());
        status.operational();
    }

    @PreDestroy
    public void destroy() {
        connectorTimer.cancel();
        connector.shutdown();
        status.stopped();
    }
}

在上面的类中,我想不出任何使用TDD的测试场景,所以我只是想出了代码,现在我想知道我到底能在这里进行什么单元测试。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-30 17:01:18

好吧,我们可以证明这门课做了些什么。它改变了状态,它启动了一个计时器。您可以通过Mockito将这些对象的模拟注入类中,然后确保initialized()destroy()都执行您期望它们对这些模拟所做的操作。

代码语言:javascript
复制
@RunWith(MockitoJUnitRunner.class)
public class PipsAlprConnectionRunner {

    @Mock
    private PipsAlprConfiguration config;

    @Mock
    private PipsAlprConnector connector;

    @Mock
    private Scheduler scheduler;

    @Mock
    private ServiceStatus status;     

    @InjectMocks
    private PipsAlprConnectionRunner pipsAlprConnectionRunner ;

    @Test
    public void initialized_should_set_status_started() {
         pipsAlprConnectionRunner.initialized();
         Mockito.verify(status).started();
    }

    // etc.
}

如果您想在每个“故障点”创建一个方法,或者每个方法/测试创建一个方法,这几乎是一个关于个人品味的问题。

就我个人而言,我会说目标是100%的覆盖率,所以即使是非常简单的类,主要委托应该涵盖。如果有人改变了什么怎么办?测试确保这些更改不会破坏现有功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39217084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档