Visual Studio 测试资源管理器以外语运行测试

Visual Studio test explorer runs tests in foreign language

我已经创建了 C# 单元测试(使用 VS 测试工具)。除其他外,还有检查异常的测试:

Assert.AreEqual("Object reference not set to an instance of an object.", e.Message);

当我打开单元测试文件并单击上下文菜单中的 "Run tests" 时,一切正常。当我使用 Visual Studio 的测试资源管理器并在那里单击 "Run tests" 时,我收到异常消息说异常消息不同。实际上,它与我正在检查的相同,但使用的是另一种语言。两种情况下的测试 运行 是相同的,没有语言变化或其他任何东西,只是简单的逻辑测试。我的 OS 是英文的,Visual Studio 也是。我在另一个解决方案中进行了类似的测试,一切正常。这个解决方案和我正在为其编写单元测试的项目之一是由一位拥有这种外语系统的同事创建的。但是,我无法在任何地方找到这样的设置。有人知道这些可能在哪里吗?我如何获得英语测试 运行?

尝试改用 HResult。

Assert.AreEqual(val, e.HResult)

不应因语言而异。 HResult 是分配给特定异常的编码数值,因此使用 HResult 您可以知道正在抛出哪个异常。

编辑:

或者如果您知道您期望的异常是什么,您可以编写自己的异常-"expecter"。

protected static void ThrowsException<T>(Action action) where T : Exception
    {
        var thrown = false;
        try
        {
            action();
        }
        catch (T)
        {
            thrown = true;
        }

        Assert.IsTrue(thrown);
    }

然后像这样使用它:

ThrowsException<IndexOutOfRangeException>(() => MyController.MyAction());

这是我的测试解决方案,以防其他人需要。当测试依赖于语言时,这并不是很好,所以我现在检查异常类型:

Assert.IsInstanceOfType(e, typeof(ArgumentNullException));

不过,我还是想知道这个语言是从哪里来的。当我所有的东西都是英文的时候,我真的希望它是英文的。

你为什么不只使用 Throws 来处理特定的异常呢?检查字符串消息真的很糟糕。在我看来,它比使用 IsInstanceOfType

更干净
var testDelegate = () => MyService.Method(params);
Assert.Throws<NullException>(testDelegate);