How to run setup code only once in an xUnit.net test

前端 未结 3 1187
我在风中等你
我在风中等你 2020-12-29 22:17

I\'m trying to setup my tests using Xunit. I have a requirement to delete all images in a folder start of the tests, and then each method does some image resizing and saves

3条回答
  •  死守一世寂寞
    2020-12-29 22:44

    Following the guidance in this xUnit discussion topic, it looks like you need to implement a constructor on the Fixture and also implement IDisposable. Here's a complete sample that behaves the way you want:

    using System;
    using System.Diagnostics;
    using Xunit;
    using Xunit.Sdk;
    
    namespace xUnitSample
    {
        public class SomeFixture : IDisposable
        {
            public SomeFixture()
            {
                Console.WriteLine("SomeFixture ctor: This should only be run once");
            }
    
            public void SomeMethod()
            {
                Console.WriteLine("SomeFixture::SomeMethod()");
            }
    
            public void Dispose()
            {
                Console.WriteLine("SomeFixture: Disposing SomeFixture");
            }
        }
    
        public class TestSample : IUseFixture, IDisposable
        {
            public void SetFixture(SomeFixture data)
            {
                Console.WriteLine("TestSample::SetFixture(): Calling SomeMethod");
                data.SomeMethod();
            }
    
            public TestSample()
            {
                Console.WriteLine("This should be run once before every test " + DateTime.Now.Ticks);
            }
    
            [Fact]
            public void Test1()
            {
                Console.WriteLine("This is test one.");
            }
    
            [Fact]
            public void Test2()
            {
                Console.WriteLine("This is test two.");
            }
    
            public void Dispose()
            {
                Console.WriteLine("Disposing");
            }
        }
    }
    

    When running this from the console runner, you'll see the following output:

    D:\xUnit>xunit.console.clr4.exe test.dll /html foo.htm xUnit.net console test runner (64-bit .NET 4.0.30319.17929) Copyright (C) 2007-11 Microsoft Corporation.

    xunit.dll: Version 1.9.1.1600 Test assembly: test.dll

    SomeFixture ctor: This should only be run once

    Tests complete: 2 of 2

    SomeFixture: Disposing SomeFixture

    2 total, 0 failed, 0 skipped, took 0.686 seconds

    Then, when you crack open the test output file foo.htm, you'll see the other test output.

提交回复
热议问题