gpt4 book ai didi

java - Mockito 模拟方法返回 NULL

转载 作者:行者123 更新时间:2023-11-30 07:47:58 28 4
gpt4 key购买 nike

我正在使用 Mockito 并尝试模拟下面的测试类。这里主要的类方法 createNewId() 通过点击 dao 类 'memberDao.findNext()' 来获取对象。我正在尝试模拟“memberDao.findNext()”并返回对象,如下面的代码所示,但它返回为 NULL。

还有如何为“memberDao.delete(newId.getId());”这样的无效方法编写测试需要在这一行“when(memberDao.findNext()).thenReturn(id);”之后实现这个

请让我知道我做错了什么。

@RunWith(MockitoJUnitRunner.class)
public class MemberTest
{
@InjectMocks
private Member member;
@Mock
private MemberDao memberDao;

@Test
public void createId() throws Exception
{
MembersIdDto id = new MembersIdDto();
id.setId("967405286");
when(memberDao.findNext()).thenReturn(id);
verify(member).createNewId().contains("967405286");
}


public class Member {
@Resource
MemberDao memberDao;

public String createNewId()
{
MembersIdDto newId = memberDao.findNext();
Assert.notNull(newId, "newId is empty");
String id = newId.getId();
memberDao.delete(newId.getId());
return id;
}
}

memberDao.findNext() 是我要模拟的行。

错误是:java.lang.IllegalArgumentException: newId 为空

at org.springframework.util.Assert.notNull(Assert.java:134)
at Member.createNewId() (Member.java:20)

//第 20 行是 "Assert.notNull(newId, "newId is empty");"

最佳答案

您的要求的一个工作示例可以是:

@RunWith(MockitoJUnitRunner.class)
public class MemberTest {
@InjectMocks
private Member member;
@Mock
private MemberDao memberDao;

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}

@Test
public void createId() throws Exception {
MembersIdDto dto = new MembersIdDto();
dto.setId("967405286");
when(memberDao.findNext()).thenReturn(dto);

assertThat(member.createNewId()).isEqualTo("967405286");
}
}

…与被测类…

public class Member {
@Resource
MemberDao memberDao;

public String createNewId() {
return memberDao.findNext().getId();
}
}

……和……

public class MemberDao {
public MembersIdDto findNext() {
return null; // or whatever
}
}

……和……

import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
public class MembersIdDto {
private String id;
}

顺便说一下,我使用 AssertJ assertion framework使用 member.createNewId(),您现在可以真正调用生产代码。

关于java - Mockito 模拟方法返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520818/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com