簡體   English   中英

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);

當我打開單元測試文件並在上下文菜單中單擊“運行測試”時,一切正常。 當我使用Visual Studio的測試資源管理器並單擊“運行測試”時,出現異常,表示異常消息不同。 實際上,它與我要檢查的語言相同,但使用的是另一種語言。 兩種情況下運行的測試是相同的,沒有語言更改或其他任何更改,只是簡單的邏輯測試。 我的操作系統是英語,Visual Studio也是。 我在另一個解決方案中也進行了類似的測試,並且一切正常。 此解決方案以及我正在為其編寫單元測試的項目之一,是由具有該外語系統的一位同事創建的。 但是,我在任何地方都找不到這樣的設置。 有人知道這些可能在哪里嗎? 如何使測試始終以英語運行?

嘗試改用HResult。

Assert.AreEqual(val, e.HResult)

不應因語言而異。 HResult是分配給特定異常的編碼數字值,因此使用HResult可以知道將拋出哪個異常。

編輯:

或者,如果您知道預期的異常,則可以編寫自己的Exception-“ 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));

但是,我仍然想知道該語言的來源。 當我用英語掌握一切時,我真的希望它會用英語。

您為什么不只使用帶有特定異常的Throw? 檢查字符串消息確實很糟糕。 我認為它比使用IsInstanceOfType更加干凈

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM