문제

NUnit에서 생성된 TestResult.xml 파일 내에 실제로 표시되도록 단위 테스트에 "메시지"를 추가하고 싶습니다.예를 들어 현재 생성된 내용은 다음과 같습니다.

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" />
</results>

다음과 같은 추가 속성(또는 경우에 따라 노드)을 갖고 싶습니다.

<results>
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." />
</results>

아이디어는 위의 "메시지"가 테스트 메서드 자체 내에서 어떻게든 정의된다는 것입니다(제 경우에는 런타임에 생성됨).이런 일을 할 수 있도록 내가 놓친 속성이 어딘가에 있습니까?

도움이 되었습니까?

해결책

요점이 누락되었을 수 있지만 테스트 대상을 나타내도록 테스트 이름을 지정하는 것은 어떻습니까? 그러면 메시지가 필요하지 않을 수도 있습니다.

그것이 절대적으로 필요한 것으로 판명되면 (내 머리 꼭대기에서) TestCase에서 추가 속성을 읽고 이를 출력에 첨부하는 자체 테스트 실행기를 생성해야 한다고 생각합니다.

다른 팁

최근 NUnit 릴리스에서는 다음을 수행할 수 있습니다.

Assert.AreEqual(250.00, destination.Balance, "some message here");

여기서 "Some message here"는 상수 메시지이거나 런타임에 생성되어 문자열 변수에 저장된 메시지일 수 있습니다.그러나 이러한 메시지는 어설션이 실패한 경우에만 출력에 나타납니다.그러나 일반적으로 실패한 테스트에 대한 정보만 필요하므로 이전 메시지를 각각 추가한 다음 해당 문자열 변수를 모든 어설션의 메시지로 사용하여 문자열을 구축하는 것이 좋습니다.이를 통해 실패한 테스트에서 필요한 모든 정보를 얻을 수 있습니다.

런타임에는 사용할 수 있는 항목이 없지만 조사해 볼 수 있는 몇 가지 기능이 있습니다.그만큼 설명 속성과 재산 속성은 둘 다 XML 출력 파일에 텍스트를 추가합니다.불행히도 둘 다 컴파일 타임에 정의됩니다.

TestContext를 사용하여 원하는 메시지를 쉽게 작성할 수 있습니다.설정 방법은 다음과 같습니다.

각 테스트는 testbase 클래스에서 상속됩니다.이렇게 하면 중복 코드가 제거됩니다.

[TestFixture]
public class TestBase
{

    public IWebDriver driver;

    //[OneTimeSetUp] and [OneTimeTearDown] go here if needed

    [SetUp]
    public void Setup(){
         driver = Shortcuts.SetDriver("my browser");
    }

    [TearDown]
    public void TearDown()
    {
        driver.Quit();
        Comment("@Result: " + TestContext.CurrentContext.Result.Outcome.ToString());
    }

    public void Comment(string _comment)
    {
        TestContext.Out.WriteLine(_comment);
    }
    public void Error(string _error)
    {
        TestContext.Error.WriteLine(_error);
    }

}

아래쪽 두 함수가 해당 TestContext의 메시지나 오류를 기록하는 것을 볼 수 있습니다.이는 병렬화 가능한 테스트에서도 잘 작동합니다.

그런 다음 해당 상위 클래스를 사용하여 테스트를 설정하고 콘솔에 쓸 수 있습니다.

//Role Management
public class RoleManagementTests : TestBase
{
    [TestCase]
    public void RoleManagement_7777_1()
    {
        Comment("Expected: User has the ability to view all roles in the system.");
        //Test goes here
    }
}

이제 NUnit Console Runner를 사용하여 출력(Visual Studio) 및 TestResult.xml에서 결과를 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top