gpt4 book ai didi

cucumber-jvm - cucumber JVM : Test if the correct exception is thrown

转载 作者:行者123 更新时间:2023-12-03 13:27:00 46 4
gpt4 key购买 nike

如何测试使用 Cucumber JVM 时是否抛出了正确的异常?使用 JUnit 时,我会这样做:

@Test(expected = NullPointerException.class)
public void testExceptionThrown(){
taskCreater.createTask(null);
}

如您所见,这是非常优雅的。但是,当使用 cucumber JVM 时,我怎样才能达到同样的优雅呢?我的测试现在看起来像这样:
@Then("the user gets a Null pointer exception$")
public void null_exception_thrown() {
boolean result = false;
try {
taskCreater.createTask(null);
} catch (NullPointerException e) {
result = true;
}
assertTrue(result);
}

注意需要 try .. catch后跟 assertTrue在一面旗帜上。

最佳答案

测试不愉快的路径可能很困难。这是我发现用 cucumber 做的一个好方法。

Scenario: Doing something illegal should land you in jail
Then a failure is expected
When you attempt something illegal
And it fails.

好吧,不要拍我,因为我放了 ThenWhen 之前,我只是觉得它读起来更好,但你不必那样做。

我将我的异常存储在一个( cucumber 范围的)世界对象中,但您也可以在您的步骤文件中执行此操作,但这将在以后限制您。
public class MyWorld {
private boolean expectException;
private List<RuntimeException> exceptions = new ArrayList<>();

public void expectException() {
expectException = true;
}

public void add(RuntimeException e) {
if (!expectException) {
throw e;
}
exceptions.add(e);
}

public List<RuntimeException> getExceptions() {
return exceptions;
}
}

您的步骤非常简单:
@Then("a failure is expected")
public void a_failure_is_expected() {
myWorld.expectException();
}

在您(至少有时)期待异常的步骤中,捕获它并将其添加到世界中。
@When("you attempt something illegal")
public void you_attempt_something_illegal() {
try {
myService.doSomethingBad();
} catch (RuntimeException e) {
world.add(e);
}
}

现在您可以检查异常是否记录在世界中。
@And("it fails")
public void it_fails() {
assertThat(world.getExceptions(), is(not(empty()));
}

这种方法最有值(value)的地方在于,它不会在您没有预料到的时候吞下异常。

关于cucumber-jvm - cucumber JVM : Test if the correct exception is thrown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17272161/

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