问题描述
所以我对如何将验证代码更改/转换为Hamcrest匹配器模拟感到有些困惑,我的意思是我知道我们必须使用assert,但是我不确定应该在assert中放入什么。找朋友。
这是我的Java代码
public interface Client {
void receive(Message message);
List<SubType> getSubscriptionType();
}
public class ClientSubscription {
private Client client;
private SubscriptionCategory subscriptionCategory;
public ClientSubscription(Client client,SubscriptionCategory subscriptionCategory) {
this.client = client;
this.subscriptionCategory = subscriptionCategory;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public SubscriptionCategory getSubscriptionCategory() {
return subscriptionCategory;
}
public void setSubscriptionCategory(SubscriptionCategory subscriptionCategory) {
this.subscriptionCategory = subscriptionCategory;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ClientSubscription that = (ClientSubscription) o;
return Objects.equals(client,that.client) &&
subscriptionCategory == that.subscriptionCategory;
}
@Override
public int hashCode() {
return Objects.hash(client,subscriptionCategory);
}
}
public interface Logger {
void log(LocalDate date,String message);
}
public interface Message {
SubscriptionCategory getSubscriptionCategory();
LocalDate getDate();
String getMessage();
}
public enum SubscriptionCategory {
HORSE_RACES,F1_RACES,BOAT_RACES
}
public class RaceResultsService {
private Collection<ClientSubscription> subscriptions = new HashSet<>();
private Logger logger;
public RaceResultsService(Logger logger) {
this.logger = logger;
}
public void send(Message message) {
logger.log(message.getDate(),message.getMessage());
subscriptions.stream()
.filter(s -> s.getSubscriptionCategory() == message.getSubscriptionCategory())
.forEach(s -> s.getClient().receive(message));
}
}
这是我的测试代码
public class RaceResultsServiceTests {
private Logger logger = mock(Logger.class);
private RaceResultsService raceResultsService = new RaceResultsService(logger);
private Client clientA = mock(Client.class,"clientA");
private Client clientB = mock(Client.class,"clientB");
@Test
public void multipleSubscribedClientsShouldReceiveMessages(){
Message horseRacesMessage = mock(Message.class);
when(horseRacesMessage.getSubscriptionCategory()).thenReturn(SubscriptionCategory.HORSE_RACES);
raceResultsService.addSubscription(clientA,SubscriptionCategory.HORSE_RACES);
raceResultsService.addSubscription(clientB,SubscriptionCategory.HORSE_RACES);
raceResultsService.send(horseRacesMessage);
verify(clientA).receive(horseRacesMessage);
verify(clientB).receive(horseRacesMessage);
}
}
例如,如何将该代码更改为其断言等效项?
verify(clientA).receive(horseRacesMessage);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)