Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将一个@Mock注入另一个@Mock还是重构?_Java_Unit Testing_Mocking_Mockito - Fatal编程技术网

Java 将一个@Mock注入另一个@Mock还是重构?

Java 将一个@Mock注入另一个@Mock还是重构?,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,对于我来说,有没有一种方法可以在测试类中注入带有mocked的CS,因为它内部有一个CachedDb的注入mock?代码可以不费吹灰之力地重构:我将doSomething放在AS中,因为其行为类似于AS的其他函数,但如果这是一个糟糕的设计,我可以将其重构为一个共享的utils包或类似的东西 提前感谢您的帮助。对Foo的单元测试应该只关心模拟Foo的直接依赖关系 您不应该假设AS使用CachedDb来实现其方法。CS不在乎。它所做的只是与AS进行交互。AS是否使用CachedDB无关紧要,只要它的

对于我来说,有没有一种方法可以在测试类中注入带有mocked的CS,因为它内部有一个CachedDb的注入mock?代码可以不费吹灰之力地重构:我将doSomething放在AS中,因为其行为类似于AS的其他函数,但如果这是一个糟糕的设计,我可以将其重构为一个共享的utils包或类似的东西


提前感谢您的帮助。

Foo
的单元测试应该只关心模拟
Foo
的直接依赖关系

您不应该假设AS使用CachedDb来实现其方法。CS不在乎。它所做的只是与AS进行交互。AS是否使用CachedDB无关紧要,只要它的方法执行它们应该执行的操作

因此,CS的测试应该模拟为。没有缓存DDB

@RunWith(MockitoJUnitRunner.class)
public class CSTest {

    @Mock
    private CachedDb cachedDb;

    @InjectMocks
    private AS aS;

    @InjectMocks
    private CS cS;
}


public class CS extends BS {

     @Inject
     protected AS aS;

     public doStuff() {
         aS.doSomething();
   }

}

public class AS extends BS {
    //bunch of code here
}