java - 在 ClassUnderTest 中模拟公共(public)方法调用 |处理 ArrayList

标签 java unit-testing mocking mockito

假设我有以下场景:

public class ClassUnderTest()
        {

        private Service myService;

        public SomeData method1(final InputData input) {
            final SomeData result = method2(myservice.getOutput(input));
            return result;
        }

        public SomeData method2(final OutputData output){
            //Do something with the OutputData
        }
   }

现在我想测试method1()。由于它正在调用 method2() 我还需要确保 method2() 内的所有内容都正常工作。但问题是,由于我测试了所有方法,所以我会单独测试 method2() 。

那么我怎么知道只测试method1()而不考虑method2()。我很想在调用 method2() 时只使用 doNothing() ,但由于它是我想要测试而不是 mock 的类,所以我不能这样做。或者有没有可能?

2.) 当两个 ArrayList 都应该只有两个具有相同值的对象时,如何断言它们相等。例如:

@Test 
public void test(){
User user1 = new User();
User user2 = new User();

user1.setMail("mail");
user2.setMail("mail");

list<User> list1 = new ArrayList<User>();
list<User> list2 = new ArrayList<User>();

list1.add(user1);
list2.add(user2);

assertEquals(list1,list2);

}

这会失败,因为它们不是相等的对象。

最佳答案

你真的应该分开问这些问题,但我尝试回答两个问题:

<强>1。使用 Mockito 进行部分模拟

我不太确定是否真的建议部分模拟。但使用mockito这是可能的。您可以模拟您的ClassUnderTest并告诉mockito在调用method1时执行真正的方法

ClassUnderTest mock = Mockito.mock(ClassUnderTest.class);
when(mock.method1()).thenCallRealMethod();

参见http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html#partial_mocks

<强>2。对集合的断言

AssertJ 为您提供了关于集合的非常好的断言 - 例如:

List<String> list1 = Arrays.asList("1", "2", "3");
List<String> list2 = Arrays.asList("1", "2", "3");
then(list1).containsExactlyElementsOf(list2);

请参阅此处了解详细信息 https://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#extracted-method-result-assertion

https://github.com/joel-costigliola/assertj-examples/blob/master/assertions-examples/src/test/java/org/assertj/examples/ListSpecificAssertionsExamples.java

关于java - 在 ClassUnderTest 中模拟公共(public)方法调用 |处理 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543838/

相关文章:

java - 如何在java工具中使用拦截器?

java - 在枚举类型中使用整数

javascript - 是否有 javascript 框架来根据浏览器类型运行单元测试

.net - .NET项目中单元测试和验收测试的实现

java - 使用静态方法处理最终类

C# - 单元测试,模拟?

testing - 如何模拟闭包以测试 Grails 服务结果?

java - DOCX 不支持表中超过 63 列?

java - Spring数据,从单向列表中获取实体

python - 在 Python 中模拟链式调用