如何使用 Mockito 比较 Junit 测试用例中的多个条件

How to Compare Multiple Conditions in Junit Test Cases using Mockito

我想使用 Mockito 在 Junit 测试用例中给出多个条件。 我需要使用 mockito 的 Junit 测试用例的代码是 below.Help 我不在这个问题上。

      Customer customer;//Cutomer is a class;
      String temp;
      if(customer.isSetValid() &&
      StringUtil.hasvalue(temp=customer.isGetValid.getValue()))

如何在Mockito.Syntax中使用多个条件是-When(conditions).thenReturn(true);

when 条件是方法的输入参数,而不是 if 条件,因此您可以传递两个方法参数,它们将成为 mock 的条件。

因此,当模拟一个方法时,您可以传递一个模拟客户和一个 temp 值,您将在测试它时将其传递给该方法,这样模拟将 return 无论您在 thenReturn 函数中传递什么.

您也可以使用像 any

这样的匹配器

我猜您想使用 Customer 作为根据您的问题在 mock 上完成的方法的参数,但您希望确保客户处于预期状态。你可能会尝试阐明意图或用例,或者用伪语言写下你想做什么。

如果您有 http 客户端,它有 saveCustomer(Customer customer) 并且客户创建不在您的控制范围内(class 1 save customer 正在创建客户并通过 http 保存),并且您想要在 http 客户端使用它时验证 Customer 对象的状态你可以这样做:

Client client = Mockito.mock(Client.class);
Class1 class1 = new Class1(client); //class that uses client and creates customer
ArgumentCaptor<Customer> customerCaptor = ArgumentCaptor.forClass(Customer.class);

class1.createCustomer(); //method that does create and save

verify(client).saveCustomer(customerCaptor.capture());
final Customer customer = Customer.getValue();

Assert.assertTrue(customer.isSetValid());
Assert.assertTrue(StringUtil.hasvalue(temp=customer.isGetValid.getValue()));
//do other asserts on customer

请检查 mockito argument captor 了解更多详细信息,但这是一种很好的方法,既可以验证该方法是否按预期 class 调用,又可以捕获实例,以便您可以对其进行断言。