2011-05-11 75 views
1

我正在嘗試使用Moles來測試單獨程序集中的非靜態方法。在沒有[HostType(「Moles」)]標籤的情況下運行測試時,測試運行良好。當我替換它時,我收到以下錯誤:TypeInitializationException當使用Moles With HtmlAgilityPack

「'HtmlAgilityPack.HtmlNode'的類型初始值設定項引發異常。」

我附上了以相同方式執行的代碼示例。

任何幫助將是偉大的!

類/方法,通過單元測試被稱爲

using System; 
using HtmlAgilityPack; 
using System.Web; 

namespace HAPAndMoles 
{ 
    public class Class1 
    { 
     public void fooBar() 
     { 
      HtmlDocument foo = new HtmlDocument(); 
     } 
    } 
} 

單元測試

using System; 
using System.Text; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using HAPAndMoles; 
using Microsoft.Moles.Framework; 
using HtmlAgilityPack; 
using System.Web; 

namespace HAPAndMoles 
{ 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     [HostType("Moles")] 
     public void TestMethod1() 
     { 
      Class1 bar = new Class1(); 
      bar.fooBar(); 
     } 
    } 
} 
+0

您可以添加引發異常的完整堆棧跟蹤,而不僅僅是第一行嗎? – 2011-05-11 08:02:41

回答

0

我不知道我理解你的例子,因爲其實你不使用痣。

如果您只是想要「鼴鼠」我們自己的非虛擬方法,在測試項目的參考文獻中,您只需右鍵單擊測試項目的程序集並選擇添加Moles程序集。這將創建一個HAPAndMoles.Moles參考。

然後添加相應的使用,你可以調用你的類「moled」從M開始(Class1 => MCLass1)。我告訴你一個例子測試MCLASS1行爲:

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using HAPAndMoles; 
using HAPAndMoles.Moles; 

namespace HAPAndMoles { 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     [HostType("Moles")] 
     public void TestMethod1() 
     { 
      bool called = false; 
      var bar = new MClass1() 
      { 
       fooBar =() => called = true 
      }; 
      ((Class1)bar).fooBar(); 
      Assert.IsTrue(called); 
     } 
    } 
} 

當我想要的mscorlib的痣,我直接在測試項目的引用右鍵單擊我可以添加痣大會的mscorlib。然後

using Microsoft.Moles.Framework; 

是必要的。

+0

Jeco ...感謝您的信息。 我把我的例子中的一些東西放到了最小的形式。我原來的代碼確實包含了對moled代碼的使用。 在閱讀您的回覆之後,我注意到我忽略爲HtmlAgilityPack程序集創建一個痣。 – 2011-05-12 05:13:44

相關問題