2010-04-13 91 views
20

今天我升級了我的解決方案,將VS2008的所有基礎項目升級到VS2010。除了我的單元測試以外,一切都很順利。ExpectedException on TestMethod Visual Studio 2010

首先只有Web項目有作爲目標框架.NET 4.所有其他項目仍然有.NET 3.5。我將它們全部更改爲.NET 4.

現在,當我調試我的單元測試時,每個異常都會中斷。在2008年,它只是不會通過,並告訴我發生了一個例外。即使我定義了ExpectedException屬性,它也會停止對每個異常進行調試。

而且例如我的測試之一:

[TestMethod] 
[ExpectedException(typeof(EntityDoesNotExistException))] 
public void ConstructorTest() 
{ 
    AddressType type = new AddressType(int.MaxValue); 
} 

的EntityDoesNotExistException是一個自定義異常,並繼承了異常。

編輯 我在2008年和2010年看了看例外設置(Ctrl + Alt + E)在這兩個版本的設置是相同的。然而,在2008年,當我擁有ExpectedException屬性時,調試不會中斷。在2010年它確實破裂。

+0

測試有不同的結果嗎?預期的例外是否仍然有效?調試時它有什麼不同嗎? – 2010-06-28 11:30:00

回答

2

按下Ctrl + Alt + E並檢查CLR異常的異常中斷設置。如果這設置爲true,那麼您描述的行爲將發生。

+0

這意味着這已在2010年發生了變化?這些設置是項目還是解決方案? – Joop 2010-04-13 11:25:26

+0

我有兩個選擇:拋出異常時中斷,異常時中斷是用戶未處理的。只有最後一個選項檢查CLR異常。 – Joop 2010-04-13 11:32:50

+0

解決方案的一部分確實從這裏開始。詳情請參閱我自己的答案。 – Dabblernl 2010-06-29 23:00:12

0

我有同樣的問題,但最終設法得到它的工作。不知道如何,但這是我做的事情之間的一個列表,它不工作,當它再次開始工作。

  • 轉換的項目被測試.NET 4
  • 熄滅代碼覆蓋率
  • 轉身代碼覆蓋率重新打開
  • 沒過RebuildAll上測試項目

不知道該位固定它雖然。無論如何,希望這有助於!

+1

我有VS2010專業版。代碼覆蓋率僅在Premium和Ultimate中可用。但是,謝謝你的建議! – Joop 2010-04-19 10:20:17

+0

我認爲我做的其他事情是繼續Test-> Edit Test Settings,然後執行Save As,通過編寫以前的文件。理論上這應該不會有效果,但我確實已經讀過有人刪除了他的測試設置文件,並且對他的問題進行了排序。 HTH – 2010-04-19 16:36:29

+0

不幸的是,這也是行不通的。真的很奇怪的行爲。 – Joop 2010-04-23 07:07:21

1

確保您對Microsoft.VisualStudio.QualityTools.UnitTestingFramework的引用是版本10.0.0.0。

如果是9.0.0.0版本將出現在Visual Studio這個問題2010年

希望這有助於。如果人們仍然有這個問題。

+0

在我的測試項目中,我已經使用10.0.0.0版本。 – Joop 2010-05-27 11:52:08

+0

-1:vs 2008支持ExpectedException – 2010-06-27 16:46:55

+1

@John:這不是因爲2008不支持預期的異常。這是因爲屬性類不一樣。如果您引用了2008年的測試框架,編譯器會將2008年的屬性放在您的測試類中。測試運行程序僅檢查2010的屬性(不同的程序集=>不同的類),因此它根本不能識別該屬性。我們遇到了同樣的問題。 – 2010-06-28 16:11:18

12

Gerrie我指出了正確的方向:

  • 按Ctrl-Alt-E
  • 打開公共語言運行庫Excepions節點
  • 單擊添加
  • 類型Microsoft.VisualStudio.TestTools.UnitTesting .AssertFailedException
  • 確保兩個複選框均未選中。

這將消除失敗斷言的中斷,但當您設置ExpectedException時,測試仍然會中斷。

我是設置100個紅利這種情況的一個,所以一些upvotes將不勝感激;-)

+1

那麼,在2013年仍然有幫助,所以有你upvote :) – acarlon 2013-09-12 03:05:44

+0

我添加了條目,並沒有爲我工作(VS2015 R3)。你的意思是「這兩個複選框未被選中」。我沒有選中我添加的那個(Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException)。其他複選框取消選中是什麼? – inliner49er 2017-02-02 03:04:21

2

Microsoft支持傢伙告訴我要使用Ctrl-F5(啓動而不調試)運行我的單元測試時, ,這似乎工作。

要嘗試的另一件事是去工具|選項|調試 並取消選中「啓用我的代碼」選項。

+0

只是我的代碼解決了我的情況 – 2012-02-22 22:40:42

0

我最終將測試更改爲這種形式以避免破壞。不理想:

[TestMethod] 
    public void Guid() 
    { 
    try 
    { 
     Guid g = new Guid("myguid'123'"); 
    } 
    catch(FormatException fe) 
    { 
     return; // expected exception - pass 
    } 

    Assert.Fail(); // exception not thrown - fail 
    }