2015-11-10 53 views
0

我需要为我的应用程序创建一些单元测试,但我不知道如何继续,也找不到任何在线帮助。我想知道的是如何测试应用程序,其中有许多方法依赖于其他几个方法。如何使用依赖关系对单元测试方法进行单元测试

例如

public class foo(){ 

    public void doIt() { 
     boz(); 
     bar(); 
     biz.baz(); //from another class 
    } 

    public void bar(){ 
     ... 
    } 

    public int boz(){ 
     ... 
    } 

} 

所以像上面一个给出的一个场景会认为既然是要反正失败,如果事情是错叫里面的方法是单元测试doIt方法就足够了。

虽然,我不确定我们是否可以认为这是单元测试,因为它测试的不仅仅是一个实体的功能。另外,如果方法doIt上的测试失败,那么将很难确定发生错误的位置,特别是在存在多个依赖关系的情况下 - 这是否违背了单元测试的含义?

到目前为止,我已经想到的唯一方法是,首先测试的依赖关系(即barbozbaz),然后doIt方法来启动。这样,如果测试套件没有错误并且失败意味着在该方法中实现的代码出现问题,而不是在其依赖关系内,则测试套件获得doIt

但是,这是正确的做法吗?

+1

'bar'和'boz'不是依赖项,因为它们是您正在测试的类的一部分。事实上,'biz'就是依赖。为了单元测试'foo',你需要使'biz'成为一个接口而不是具体的实现。这样你可以在单元测试中提供一个虚拟版本的'biz'。 –

+0

@KaseySpeakman提到'bar'和'boz'不是依赖关系,他们应该面对你的测试。为什么不使用已知的框架如JUnit? –

+0

@KaseySpeakman是不是有点太多?改变整个实现和创建接口我不需要为了单元测试而另外使用它。其他方法怎么样?我是否也单独测试它们?即'boz'和'bar' – Rakim

回答

0

,而不必调用吧),真正实现(和巴兹()测试doIt方法()方法,在的Mockito使用间谍:

Mockito spy documentation

如果巴()真的是无效的,你可以做这样的事情:

foo f = spy(new foo()); 
doNothing().when(foo).bar(); 

更好的是,如果你能注入你的依赖关系(例如:BIZ)作为模仿对象,直接测试你的Foo类。

+0

并单独测试依赖关系?考虑到一种方法可能有很多不同的依赖关系,这可能会使测试套件的大小变得很大!但我会看看mockito。它似乎可能有帮助 – Rakim

+1

是的,你可以单独测试依赖关系。这是一种非常常见的模式,为每个类(每次一个类测试一个类)进行单元测试,以及测试一组类的功能/组件/集成测试。 –

相关问题