gpt4 book ai didi

java - 与 "not"一起使用的自定义 hamcrest 匹配器?

转载 作者:行者123 更新时间:2023-12-03 06:09:47 26 4
gpt4 key购买 nike

我有一些类(例如,Entity)。

我希望能够

  1. 使用一些自定义代码来测试其实例是否“有效”
  2. 还可以测试实例是否无效,最好使用相同的代码。

使用 maven、surefire、JUnit 4.11(以及附带的 hamcrest 东西)。

所以我写了一个像这样的类

class IsValidEntity extends TypeSafeMatcher<Entity>{

@Override public boolean matchesSafely(Entity e){
// and here I do a bunch of asserts...
assertNotNull(e.id);
// etc.
}

@Override
public void describeTo(Description description) {
description.appendText("is valid entity");
}

@Factory
public static <T> Matcher<Entity> validEntity() {
return new IsValidEntity();
}
}

好吧,那我就可以了

assertThat(entity, is(validEntity()); 

在 JUnit 测试中,非常好。

但是我做不到

assertThat(entity, not(validEntity());

因为 validEntity 因断言损坏而失败,而我认为它应该只是返回 false

显然我在这里做了一些倒退的事情,但我不确定执行这些自定义匹配器的最聪明的方法是什么。或者也许我根本不应该使用 TypeSafeMatcher 而应该做一些不同的事情?

最佳答案

您的 matchesSafely 方法应该重写以避免引发断言失败。相反,只需手动执行检查,然后在必要时返回 false

然后,您可以按照您想要的方式否定它,而不会产生任何后果。

关于java - 与 "not"一起使用的自定义 hamcrest 匹配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16667596/

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