对于想了解assertAll与JUnit5中的多个断言的读者,本文将是一篇不可错过的文章,我们将详细介绍junitassertthrow,并且为您提供关于AssertContains在jUnit中的字
对于想了解assertAll与JUnit5中的多个断言的读者,本文将是一篇不可错过的文章,我们将详细介绍junit assertthrow,并且为您提供关于AssertContains 在 jUnit 中的字符串上、Assert包含jUnit中的字符串、c# – TDD nUnit为一个方法多个断言、Java / JUnit-AssertTrue与AssertFalse的有价值信息。
本文目录一览:- assertAll与JUnit5中的多个断言(junit assertthrow)
- AssertContains 在 jUnit 中的字符串上
- Assert包含jUnit中的字符串
- c# – TDD nUnit为一个方法多个断言
- Java / JUnit-AssertTrue与AssertFalse
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
,的地址street
,number
并且想断言那些正是您所期望的:
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 中的字符串上
有没有更好的方法在 jUnit 中编写
String x = "foo bar";
Assert.assertTrue(x.contains("foo"));
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为一个方法多个断言
我有一个方法,我可以插入多个不同的输入,并检查结果是否有效.
我读到一次测试中的多个断言不是问题,我真的不想为每个输入编写新的测试.
多个断言的示例:
[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的新手,并且正在关注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的相关信息,请在本站查询。
本文标签: