MsTest - executing method before each test in an assembly

后端 未结 5 1482
青春惊慌失措
青春惊慌失措 2021-02-06 21:45

Is it possible to run specific method before each test in an assembly?

I know about TestInitialize attribute but this attribute has \"class scope\". If it\'

相关标签:
5条回答
  • 2021-02-06 22:19

    Well isn't MSTest instantiating the class for each test? That was my understanding of it. In such a case whatever you call from your constructor is the initialization code (per test by definition).

    EDIT: If it doesn't work (which I still think it should because MSTest needs to make sure that individual test method runs are isolated) then TestInitialize is your attribute. By the way the best unit-test comparison is available at Link on Codeplex

    0 讨论(0)
  • 2021-02-06 22:23

    I am not sure that this feature is possible in MsTest out of box like in other test frameworks (e.g. MbUnit).

    If I have to use MsTest, then I am solving this by defining abstract class TestBase with [TestInitialize] attribute and every test which needs this behaviour derives from this base class. In your case, every test class in your assembly must inherit from this base...

    And there is probably another solution, you can make your custom test attribute - but I have not tried this yet... :)

    0 讨论(0)
  • 2021-02-06 22:25

    [TestInitialize()] is what you need.

    private string dir;
    
    [TestInitialize()]
    public void Startup()
    {
        dir = Path.GetTempFileName();
        MakeDirectory(ssDir);
    }
    
    [TestCleanup()]
    public void Cleanup()
    {
        ss = null;
        Directory.SetCurrentDirectory(Path.GetTempPath());
    
        setAttributesNormal(new DirectoryInfo(ssDir));
        Directory.Delete(ssDir, true);
    }
    
    
    [TestMethod]
    public void TestAddFile()
    {
        File.WriteAllText(dir + "a", "This is a file");
        ss.AddFile("a");
        ...
    }
    
    [TestMethod]
    public void TestAddFolder()
    {
        ss.CreateFolder("a/");
        ...
    }
    

    This gives a new random temporary path for each test, and deletes it when it's done. You can verify this by running it in debug and looking at the dir variable for each test case.

    0 讨论(0)
  • 2021-02-06 22:32

    You want to use [AssemblyInitialize].

    See: MSDN Link

    or this question: on stackoverflow

    0 讨论(0)
  • 2021-02-06 22:33

    I think you are looking for the ClassInitialize attribute.

    0 讨论(0)
提交回复
热议问题