我希望学习如何编写JUnit测试,但我失败了。
这是我的测试:
问题在于这个简单的断言已经失败了。返回的列表是空的。 我知道,我对这一切都很陌生,但是从我的角度来看,这个失败是如此出乎意料,以至于我不知道如何解决这个问题。
这是整个代码(并不多):
这是我的测试:
@Test
public void testGetAllCustomers() {
// given
List<Customer> customerList = new ArrayList<Customer>();
customerList.add(c1);
customerList.add(c2);
customerList.add(c3);
given(customerRepository.findAll()).willReturn(customerList);
// when
List<Customer> resultList = customerService.getAllCustomers();
// then
assertThat(resultList).hasSize(3);
}
问题在于这个简单的断言已经失败了。返回的列表是空的。 我知道,我对这一切都很陌生,但是从我的角度来看,这个失败是如此出乎意料,以至于我不知道如何解决这个问题。
这是整个代码(并不多):
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import java.sql.Timestamp;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class CustomerServiceTests {
@Mock
private CustomerRepository customerRepository;
@InjectMocks
private CustomerService customerService;
private Customer c1 = new Customer(
1L,
"Hans Meyer",
false,
Timestamp.from(Instant.now()),
null,
null
);
private Customer c2 = new Customer(
2L,
"Marie Hollande",
true,
Timestamp.from(Instant.now()),
null,
null
);
private Customer c3 = new Customer(
3L,
"Mohammed Abbas",
false,
Timestamp.from(Instant.now()),
null,
null
);
@Before
public void setUp() {
MockitoAnnotations.openMocks(this);
}
@Test
public void testGetAllCustomers() {
// given
List<Customer> customerList = new ArrayList<Customer>();
customerList.add(c1);
customerList.add(c2);
customerList.add(c3);
given(customerRepository.findAll()).willReturn(customerList);
// when
List<Customer> resultList = customerService.getAllCustomers();
// then
assertThat(resultList).hasSize(3);
}
}
需要测试的函数就是这个,我知道它是有效的:
public List<Customer> getAllCustomers() {
return customerRepository.findAll();
}
实际上,我只是想学习如何编写此类测试,但几天来一直未能编写出一个。虽然有很多示例和解释,但无论我尝试什么,都没有成功的测试。
如何为getAllCustomers()创建一个可行的测试?感谢您的帮助!