Sparky의 도구 설명: 유창한 어설션
7404 단어 csharpdotnetproductivitytesting
테스트를 더 쉽고 재미있게 작성할 수 있게 해주는 도구(사실 )에 진심으로 감사하며 Fluent Assertions은 제가 가장 좋아하는 것 중 하나입니다.
Microsoft.VisualStudio.TestTools.UnitTesting Assert, StringAssert 및 CollectionAssert 클래스는... 알겠습니다. (NUnit을 사용한 지 오래되었고 xUnit을 사용해 본 적이 없어서 해당 프레임워크에 내장된 assert에 대해 잘 모릅니다.)
Fluent Assertion은 문장과 유사한 구문으로 TDD 또는 BDD 스타일 단위 테스트의 예상 결과를 지정할 수 있는 일련의 .NET 확장 메서드입니다. 예를 들어 "MSTest"구문은 다음과 같습니다.
Assert.AreEqual(31, daysInJune);
...다음과 같이 유창하게 표현할 수 있습니다.
using FluentAssertions;
. . .
daysInJune.Should().Be(31);
"FluentAssertions"네임스페이스를 "사용"하면 다음에 대한 수많은 유용한 "Should()"확장 메서드를 사용할 수 있습니다.
문자열:
번호:
날짜 시간:
컬렉션:
이것은 단지 몇 가지 예일 뿐입니다. 이들과 다른 많은 유형에 대한 수십 가지 방법이 더 있습니다.
그리고... 어설션은 연결 가능합니다!
string stateName = "OHIO";
stateName.Should().StartWith("O").And.EndWith("O").And.Contain("HI");
예외
MS 테스트
[ExpectedException(type)]
속성이 마음에 들지 않습니다. 다른 단점 중 하나는 예외 메시지를 테스트할 수 없다는 것입니다.Fluent Assertion을 사용하면 예외 테스트는 다음과 같습니다.
subject.Invoking(x => x.Foo("Hello"))
.Should().Throw<InvalidOperationException>()
.WithMessage("Hello is not allowed at this moment");
...또는 "arrange/act/assert"구문 사용:
Action action = () => x.Foo("Hello");
action
.Should().Throw<InvalidOperationException>()
.WithMessage("Hello is not allowed at this moment");
확장성
Fluent Assertion은 자신만의 "Should"확장 메서드를 작성할 수 있도록 잘 설정되어 있습니다.
내 자신의 many NuGet packages을 포함하여 추가 확장 방법을 포함하는 SparkyTestHelpers.Moq.Fluent이 있습니다.
하지만 더 있습니다!
Fluent Assertions는 어설션 작성을 위한 더 나은 구문을 제공할 뿐만 아니라 어설션이 실패할 때 훨씬 더 나은 메시지를 제공합니다. 예를 들면 다음과 같습니다.
Assert.AreEqual 사용:
string correctNameSpelling = "Bryan";
Assert.AreEqual("Brian", correctNameSpelling);
...실패 메시지는 다음과 같습니다.
Assert.AreEqual failed. Expected:<Brian>. Actual:<Bryan>.
유창한 어설션 사용:
string correctNameSpelling = "Bryan";
correctNameSpelling.Should().Be("Brian");
..실패 메시지는 다음과 같습니다.
Expected correctNameSpelling to be "Brian", but "Bryan" differs near "yan" (index 2).
"differs near"와 인덱스는 이렇게 짧은 문자열에는 약간 과잉이지만 긴 문자열에는 매우 편리합니다!
(그런데, 이것은 사소한 예가 아닙니다. correctNameSpelling은 "Brian"이어야 하며 부모님이 이름을 "Bryan"으로 지정했다면 부모님에게 전화를 걸어 불평해야 합니다.😏)
저는 Fluent Assertions를 많이 좋아합니다. .NET 단위 테스트를 작성하고 있다면 .Should()를 사용해 보십시오!
Reference
이 문제에 관하여(Sparky의 도구 설명: 유창한 어설션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sparky/these-are-a-few-of-my-favorite-tools-fluent-assertions-1a5o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)