GVKun编程网logo

assertAll与JUnit5中的多个断言(junit assertthrow)

13

对于想了解assertAll与JUnit5中的多个断言的读者,本文将是一篇不可错过的文章,我们将详细介绍junitassertthrow,并且为您提供关于AssertContains在jUnit中的字

对于想了解assertAll与JUnit5中的多个断言的读者,本文将是一篇不可错过的文章,我们将详细介绍junit assertthrow,并且为您提供关于AssertContains 在 jUnit 中的字符串上、Assert包含jUnit中的字符串、c# – TDD nUnit为一个方法多个断言、Java / JUnit-AssertTrue与AssertFalse的有价值信息。

本文目录一览:

assertAll与JUnit5中的多个断言(junit assertthrow)

assertAll与JUnit5中的多个断言(junit assertthrow)

是否有理由将多个断言分组:

public void shouldTellIfPrime(){    Assertions.assertAll(            () -> assertTrue(isPrime(2)),            () -> assertFalse(isPrime(4))    );}

而不是这样做:

public void shouldTellIfPrime(){    Assertions.assertTrue(isPrime(2));    Assertions.assertFalse(isPrime(4));}

答案1

小编典典

有趣的assertAll是,无论有多少失败,它总是检查传递给它的所有断言。如果一切顺利,那么一切都很好-
如果至少有一个失败,您将得到所有错误的详细结果(正确的解决方法)。

最好用于断言概念上属于一起的一组属性。您的第一个直觉将是“我想断言这是一个”。

您的特定示例不是最佳用例,assertAll因为isPrime使用质数和非质数进行检查是彼此独立的-如此之多,因此我建议为此编写两种测试方法。

但是,假设您有一个简单的类,例如带有字段city,的地址streetnumber并且想断言那些正是您所期望的:

Address address = unitUnderTest.methodUnderTest();assertEquals("Redwood Shores", address.getCity());assertEquals("Oracle Parkway", address.getStreet());assertEquals("500", address.getNumber());

现在,第一个断言失败后,您将永远看不到第二个断言的结果,这可能会很烦人。有很多解决方法,JUnit Jupiter assertAll就是其中之一:

Address address = unitUnderTest.methodUnderTest();assertAll("Should return address of Oracle''s headquarter",    () -> assertEquals("Redwood Shores", address.getCity()),    () -> assertEquals("Oracle Parkway", address.getStreet()),    () -> assertEquals("500", address.getNumber()));

如果被测方法返回错误的地址,则这是您得到的错误:

org.opentest4j.MultipleFailuresError:    Should return address of Oracle''s headquarter (3 failures)    expected: <Redwood Shores> but was: <Walldorf>    expected: <Oracle Parkway> but was: <Dietmar-Hopp-Allee>    expected: <500> but was: <16>

AssertContains 在 jUnit 中的字符串上

AssertContains 在 jUnit 中的字符串上

有没有更好的方法在 jUnit 中编写

String x = "foo bar";
Assert.assertTrue(x.contains("foo"));

Assert包含jUnit中的字符串

Assert包含jUnit中的字符串

有没有更好的方法来编写jUnit

String x = "foo bar";Assert.assertTrue(x.contains("foo"));

答案1

小编典典

如果添加Hamcrest和JUnit4,则可以执行以下操作:

String x = "foo bar";Assert.assertThat(x, CoreMatchers.containsString("foo"));

通过一些静态导入,它看起来要好得多:

assertThat(x, containsString("foo"));

所需的静态导入将是:

import static org.junit.Assert.assertThat;import static org.hamcrest.CoreMatchers.containsString;

c# – TDD nUnit为一个方法多个断言

c# – TDD nUnit为一个方法多个断言

在我今天的生活中第一次使用TDD.我正在使用nUnit.

我有一个方法,我可以插入多个不同的输入,并检查结果是否有效.

我读到一次测试中的多个断言不是问题,我真的不想为每个输入编写新的测试.

多个断言的示例:

[TestFixture]
public class TestClass
{

    public Program test;

    [SetUp]
    public void Init()
    {
        test = new Program();

    }
    [Test]
    public void Parse_SimpleValues_Calculated()
    {
        Assert.AreEqual(25,test.ParseCalculationString("5*5"));
        Assert.AreEqual(125,test.ParseCalculationString("5*5*5"));
        Assert.AreEqual(10,test.ParseCalculationString("5+5"));
        Assert.AreEqual(15,test.ParseCalculationString("5+5+5"));
        Assert.AreEqual(50,test.ParseCalculationString("5*5+5*5"));
        Assert.AreEqual(3,test.ParseCalculationString("5-1*2"));
        Assert.AreEqual(7,test.ParseCalculationString("7+1-1"));
    }
}

但是当一些东西失败时,很难读出哪个断言失败了,我的意思是如果你有很多断言,你必须通过所有断言找到正确的断言.

是否有任何优雅的方式来显示我们在断言失败时设置了什么输入,而不是结果和预期结果?

谢谢.

解决方法

I mean if you have them a lot,so you have to go through all.

不,你不 – 你只看堆栈跟踪.如果您在IDE中运行测试,我发现这很容易就可以确定哪条线路出现故障.

也就是说,有一个(明显)更好的方法 – 使用TestCaseAttribute进行参数化测试.例如:

[Test]
[TestCase("5*5",25)]
[TestCase("5*5*5",125)]
[TestCase("5+5",10)]
// etc
public void Parse_SimpleValues_Calculated(string input,int expectedOutput)
{
    Assert.AreEqual(expectedOutput,test.ParseCalculationString(input));
}

现在,您的单元测试运行器将分别向您显示每个测试用例,您将能够看到哪个失败.此外,它将运行所有测试,即使早期测试失败 – 因此您不会最终修复一个测试,只是发现下一个测试意外失败.

对于您想要单独指定输入集合的情况,还有TestCaseSourceAttribute – 例如跨多个测试使用.

Java / JUnit-AssertTrue与AssertFalse

Java / JUnit-AssertTrue与AssertFalse

我是Java的新手,并且正在关注Eclipse
Total Beginner’s
Tutorials
。它们都很有帮助,但是在第12课中,他将assertTrue一个测试用例assertFalse用于另一个测试用例。这是代码:

// Check the book out to p1 (Thomas)
// Check to see that the book was successfully checked out to p1 (Thomas)
assertTrue("Book did not check out correctly",ml.checkOut(b1,p1));    // If checkOut fails,display message
assertEquals("Thomas",b1.getPerson().getName());

assertFalse("Book was already checked out",p2));        // If checkOut fails,display message
assertEquals("Book was already checked out",m1.checkOut(b1,p2));

我在这些方法上搜索了很好的文档,但没有发现任何东西。如果我的理解是正确的,assertTrue以及assertFalse显示的字符串时,第二个参数的计算结果为false。如果是这样,将它们都包含在什么地方?

编辑:我想我看到了什么让我感到困惑。作者可能只是为了展示它们的功能而将它们放在其中(毕竟这是一个教程)。然后他设置了一个失败的消息,以便将消息打印出来并告诉我为什么失败了。开始变得更有意义了……我认为这是解释,但我不确定。

我们今天的关于assertAll与JUnit5中的多个断言junit assertthrow的分享已经告一段落,感谢您的关注,如果您想了解更多关于AssertContains 在 jUnit 中的字符串上、Assert包含jUnit中的字符串、c# – TDD nUnit为一个方法多个断言、Java / JUnit-AssertTrue与AssertFalse的相关信息,请在本站查询。

本文标签: