gpt4 book ai didi

java - 用 java 编写单元测试

转载 作者:行者123 更新时间:2023-11-30 03:27:18 25 4
gpt4 key购买 nike

我对单元测试和有关 Mocks 的一切都有点陌生,所以我想我需要一些帮助。

我需要为此代码编写单元测试:

@Service
public class TwitterService {

@Autowired(required=false)
private Twitter twitter;

private static final int RESULTSIZE = 5;


public List<TwitterDTO> getTweets(String tag)
{
String searchTag = "#" + tag;
SearchParameters param = new SearchParameters(searchTag);
param.count(RESULTSIZE);
param.resultType(ResultType.RECENT);

List<TwitterDTO> tweetList= new ArrayList<TwitterDTO>();


SearchResults results = twitter.searchOperations().search(param);

for(Tweet tweet: results.getTweets()) {
TwitterDTO twitterDTO = new TwitterDTO();
twitterDTO.setTweetId(tweet.getId());
twitterDTO.setName(tweet.getUser().getName());
twitterDTO.setUserNameTwitter(tweet.getFromUser());
twitterDTO.setCreatedDate(tweet.getCreatedAt());
twitterDTO.setMessage(tweet.getUnmodifiedText());
twitterDTO.setRetweetCount(tweet.getRetweetCount());
twitterDTO.setFavoriteCount(tweet.getFavoriteCount());
twitterDTO.setProfileImageUrl(tweet.getProfileImageUrl());
twitterDTO.setTwitterUrl("https://twitter.com/" + tweet.getFromUser() + "/status/" + tweet.getId());
tweetList.add(twitterDTO);
}

return tweetList;
}

public boolean isAvailable()
{
return this.twitter != null;
}

到目前为止,就我的测试知识而言,我已经了解了:

@RunWith(MockitoJUnitRunner.class)
public class TestTwitterLogic {


@Mock
private Twitter twitter;

@InjectMocks
private TwitterService service;

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


@Test
public void testService()
{
assertTrue(service.isAvailable());
service.getTweets("test");
}

}

欢迎所有建议或帮助,谢谢!

最佳答案

您需要模拟twitter.searchOperations().search(param)。模拟框架不支持模拟整个方法调用链;这就是为什么你需要模拟链的每个部分:

SearchOperations searchOpMock = mock( SearchOperations.class );
when( twitter.searchOperations() ).thenReturn( searchOpMock );

mock 第一部分。您现在可以定义一个或多个搜索结果并模拟 searchOpMock.search():

when( searchOpMock.search( any( SearchParameters.class ) ) ).thenReturn( results );

any( SearchParameters.class ) 表示“我不关心搜索是否使用正确的参数”。当类没有实现正确的 equals() 方法时(例如,当它从 Object< 继承 equals() 时),您必须使用类似的代码)。

关于java - 用 java 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889446/

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