java - Spring EasyMock 调用模拟方法时获取 null

标签 java spring easymock

第一次同时使用EasyMock和Spring。 我有测试课:

@RunWith(EasyMockRunner.class)
public class ProjectServiceTest {

    @Mock
    private ProjectRepository projectRepositoryMock;

    @TestSubject
    private ProjectService service new ProjectService();

    @Before
    public void setUp() throws Exception {
        Project project = new Project("Project");

        EasyMock.expect(projectRepositoryMock.findOne(1)).andReturn(project);
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void getProjectById() throws Exception {
      System.out.println(this.service.getProjectById(1);
    }

这是我的项目实体:

@Entity
@Table(name = "Project")
public class Project {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String projectName;


    public Project(){

    }

    public Project(String projectName) {
        this.projectNaam = projectName;
    }

它还有常见的 getter 和 setter。 我的存储库只是扩展了 JpaRepository。 这是我的 ProjectService 类

@Service
public class ProjectService {

    @Autowired
    private ProjectRepository projectRepository;

    public ProjectService(){

    }

    public Project getProjectById(Integer id){
        return this.projectRepository.findOne(id);
    }

    public void saveProject(Project project){
        this.projectRepository.save(project);
    }

    public void deleteProject(Integer id){
        this.projectRepository.delete(id);
    }

    public List<Project> getAllProjects(){
        return this.projectRepository.findAll();
    }

    public Project findProjectById(Integer id){
        return this.projectRepository.findOne(id);
    }
}

我的测试失败了,所以这就是为什么我使用 system.out.println 来弄清楚发生了什么。它打印:null。

我不明白这个。 @Mock 和 @TestSubject 看起来不错,因为我想测试服务并模拟存储库。 而不是

System.out.println(this.service.getProjectById(1);

我试过了

System.out.println(this.projectRepositoryMock.findOne(1));

但这也会返回 null。

最佳答案

您需要将模拟置于重放模式。尝试一下

@Before
public void setUp() throws Exception {
    Project project = new Project("Project");

    EasyMock.expect(projectRepositoryMock.findOne(1)).andReturn(project);
    EasyMock.replay(projectRepositoryMock);
}

关于java - Spring EasyMock 调用模拟方法时获取 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46322837/

相关文章:

json - 从传入的 JSON 反序列化 LocalDateTime

java - 在 spring boot rest api 中将图像发送到角度客户端?

java - 为什么需要在intellij中添加类路径?

java - 应用程序关闭时清理 JSF session 范围 bean

java - 同步(this)和同步方法有什么区别

java - 如何动态获取spring boot应用程序jar父文件夹路径?

java - 使用 EasyMock 测试多线程(CompletableFuture)

java - 检查 EasyMock 匹配器中的属性值

java - 使用 EasyMock 和 Mockito 模拟 void 方法

java - Android:JsonObjectRequest 内的媒体播放器