在此代码中将verifyclientA.receiveMessage转换为Assert Hamcrest Matcher Mock

问题描述

所以我对如何将验证代码更改/转换为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 (将#修改为@)