package org.test4j.module.jmockit;
import java.util.ArrayList;
import java.util.List;
import mockit.Mock;
import mockit.Mocked;
import org.junit.Test;
import org.test4j.database.table.ITable;
import org.test4j.fortest.beans.User;
import org.test4j.fortest.service.UserDao;
import org.test4j.fortest.service.UserDaoImpl;
import org.test4j.fortest.service.UserService;
import org.test4j.junit.Test4J;
import org.test4j.module.spring.annotations.SpringBeanByName;
import org.test4j.module.spring.annotations.SpringContext;
@SuppressWarnings("serial")
@SpringContext({ "org/test4j/module/spring/testedbeans/xml/beans.xml",
"org/test4j/module/spring/testedbeans/xml/data-source.xml" })
public class MockitSpringBeanTest extends Test4J {
@SpringBeanByName
private UserService userService;
@SpringBeanByName
private UserDao userDao;
@Test
public void parySalary_mockBean() {
db.table(ITable.t_tdd_user).clean().insert(2, new DataMap() {
{
this.put("id", "1", "2");
this.put("sarary", "0", "0");
}
}).commit();
new Expectations() {
@Mocked(methods = "findUserByPostcode")
UserDaoImpl userDaoImpl;
{
when(userDaoImpl.findUserByPostcode(anyString)).thenReturn(getUserList());
}
};
double total = this.userService.paySalary("310000");
want.number(total).isEqualTo(4300d);
List<User> users = userDao.findAllUser();
want.number(users.size()).isEqualTo(2);
}
@Test
public void paySalary() {
db.table(ITable.t_tdd_user).clean().insert(2, new DataMap() {
{
this.put("id", "1", "2");
this.put("sarary", "0", "0");
}
}).commit();
new MockUserDao();
// mock的行为
double total = this.userService.paySalary("310000");
want.number(total).isEqualTo(4300d);
// not mock的行为
List<User> users = userDao.findAllUser();
want.number(users.size()).isEqualTo(2);
}
public static class MockUserDao extends MockUp<UserDaoImpl> {
@Mock
public List<User> findUserByPostcode(String postcode) {
return getUserList();
}
}
private static List<User> getUserList() {
return new ArrayList<User>() {
private static final long serialVersionUID = -2799578129563837839L;
{
this.add(new User(1, 1000d));
this.add(new User(2, 1500d));
this.add(new User(2, 1800d));
}
};
}
}