这个问题是关于在Visual Studio中使用MSTest进行单元测试的(这一点很重要,因为MSTest是execution order).标记为[TestInitialize]的方法和测试类构造函数都将在每个测试方法之前运行.

所以,问题是,你倾向于在这些领域中的每一个领域做些什么?你是否避免在这两个地方进行某些活动?你的理由是什么:风格,技术,还是迷信?

推荐答案

构造函数只是语言提供的一种 struct .每个测试框架似乎都有自己的受控生命周期"初始化".使用构造函数来变异局部变量只会给你带来麻烦.

MSTest:TestMethod个测试类就有一个全新的实例.这可能是唯一一种可以在构造函数、初始值设定项或测试方法中变异局部变量而不影响其他测试方法的情况.

public class TestsForWhatever
{
    public TestsForWhatever()
    {
        // You get one of these per test method, yay!
    }

    [TestInitialize] 
    public void Initialize() 
    {
        // and one of these too! 
    }

    [TestMethod]
    public void AssertItDoesSomething() { }

    [TestMethod]
    public void AssertItDoesSomethingElse() { }
}

您的所有断言只得到一个EstablishBecause(It).所以,不要在你的断言中改变你的当地人.并且不依赖于基本上下文中局部变量的Mutations (如果您使用它们的话).

[Subject(typeof(Whatever))]
public class When_doing_whatever
{
    Establish context = () => 
    { 
        // one of these for all your Its
    };

    Because of = () => _subject.DoWhatever();

    It should_do_something;
    It should_do_something_else;
}

.net相关问答推荐

.NET MAUI垂直扫描视图(tiktok幻灯片等)

ASP.NET核心最小API必须以正斜杠开头吗?

使用CLR将数据从Excel导入SQL Server时出错

仅在有换行符时捕获分隔符之间的所有文本

在 ASP.NET MVC 中我可以在哪里放置自定义类?

在 .NET 反射中使用 GetProperties() 和 BindingFlags.DeclaredOnly

代理、包装器或外观类之间有什么区别

HttpClient 请求抛出 IOException

Int32.ToString() 是特定于文化的吗?

如何使用 log4net 记录跟踪消息?

创建多个线程并等待所有线程完成

如何对 LINQ to XML 中的元素进行深层复制?

为什么有些对象属性是 UnaryExpression 而有些是 MemberExpression?

有没有像样的 C# 分析器?

Visual Studio 类图不显示关系

例外:不支持 URI 格式

是否可以判断对象是否已附加到实体框架中的数据上下文?

.NET 的 XPath 和 XSLT 2.0?

如何判断uri字符串是否有效

MultipleActiveResultSets=True 还是多个连接?