单元测试C#[TestInitialize]

ant*_*eys 36 c# unit-testing asp.net-web-api

我是单元测试C#Web API控制器 - 每个都需要几个参数来初始化.我目前在每个测试中都有这个代码,但它非常笨重.如何将此代码放入[TestInitialize]以便在每次测试之前运行?

我尝试了以下但显然它超出了testmethods的范围.

[TestInitialize]
public void TestInitialize()
{
    APIContext apicon = new APIContext();
    xRepository xRep = new xRepository(apicon);
    var controller = new relevantController(cRep);
    controller.Request = new HttpRequestMessage();
    controller.Configuration = new HttpConfiguration();
    relevantFactoryModel update = new relevantFactoryModel();
}   
Run Code Online (Sandbox Code Playgroud)

谢谢

dmo*_*anb 66

您可以将所需的变量设置为测试类的字段,然后在TestInitialize方法中初始化它们.

class Tests 
{
    // these are needed on every test
    APIContext apicon;
    XRepository xRep;
    Controller controller;
    RelevantFactoryModel update;

    [TestInitialize]
    public void TestInitialize()
    {
        apicon = new APIContext();
        xRep = new xRepository(apicon);
        controller = new relevantController(cRep);
        controller.Request = new HttpRequestMessage();
        controller.Configuration = new HttpConfiguration();
        update = new relevantFactoryModel();
    }   
}
Run Code Online (Sandbox Code Playgroud)

这样,可以从每次测试中访问字段

  • 我认为当您并行运行测试时,运行器将为每个Thread创建一个TestClass实例,因此在测试运行时不会触及这些字段 (5认同)
  • 测试并行运行。方法TestInitialize()将在每次执行测试之前执行。因此,可以在测试运行时重新初始化字段。对或错 ? (3认同)