2010-08-12 102 views
14

我的頭靠在牆上試圖獲得一個非常簡單的測試場景。 我敢肯定我錯過了一些非常簡單的事情!Moq和Nunit入門遇到困難

無論我做什麼,我似乎從NUnit的GUI得到下面的錯誤運行鍼對我的DLL測試時: System.TypeLoadException:類型彙編「Castle.Proxies.ITestProxy「DynamicProxyGenAssembly2,版本= 0.0。 0.0,Culture = neutral,PublicKeyToken = null'正試圖實現一個不可訪問的接口。

現在我已經在堆棧溢出和其他地方看到了引用這個錯誤的地方,但是我一直在尋找的解決方案似乎沒有幫助。而且我在這個階段甚至沒有使用內部接口!我周圍的地方看到的解決方案過於投入的AssemblyInfo.cs以下行

[裝配:InternalsVisibleTo( 「DynamicProxyGenAssembly2」)

我使用:

  • 的Visual Studio 2010專業
  • C#4.0
  • 起訂量4.10810.8測試版(BIN部署)
  • NUnit的2.5.5(安裝在GAC )

要重新創建這個錯誤,我需要做的是:

  1. 創建一個新的類庫項目
  2. 參考起訂量和單位(如上)
  3. 創建的接口。我調用了我的接口ITest,並將它公開,並且它有一個方法'string TestMethod();'。爲了簡單起見,我在本地項目中這樣做。
  4. 創建一個名爲'Testing'的類,用[TextFixture]裝飾,並用[Test]
  5. 裝飾的測試方法'TestMethod'構建項目,然後針對Debug文件夾中生成的dll運行NUnit。

這裏是我的測試類的內容

namespace MoqTest { 
[TestFixture] 
public class Testing { 
    [Test] 
    public void TestMethod() { 

     var testMock = new Mock<ITest>(); 
     testMock.Setup(x => x.TestMethod()).Returns("String val"); 
     var xyz = testMock.Object; 

     Assert.AreEqual(1, 1); 

    } 
} 

}

----更新--- 起訂量變化從版本到4.10810.8一切4.0.10501.6後的作品精細!

回答

6

下測試通過對我來說:

public interface ITest { string TestMethod(); } 

public class Testing 
{ 
    [Test] 
    public void TestMethod() 
    { 
     var testMock = new Mock<ITest>(); 
     testMock.Setup(x => x.TestMethod()).Returns("String val"); 
     var xyz = testMock.Object; 

     Assert.AreEqual(1, 1); 
    } 
} 

如果您的接口是公開的,在同一程序,真的應該沒有問題。我懷疑你在某個地方錯過了輔助功能關鍵字,因爲非公開接口確實會引發運行時錯誤,因爲代理程序集將無法基於此實例化類型。

也許最好的做法是從我提供的代碼開始,一次更改一件事物,直到它匹配失敗的代碼。如果你在每次更改之間進行測試,我想你會發現缺少的東西。

如果您確實回到內部接口,請注意您的InternalsVisibleTo聲明必須與聲明的組件相同,而不是您的內部接口而不是您的測試組件。另請注意,如果您的程序集爲strongly named,則可能需要將InternalsVisibleTo語句的公鑰指紋添加爲described in MSDN

+0

感謝您的努力,但即使您的示例也出現了同樣的錯誤。 (在一個只有這個類的新項目/解決方案中!) 所以要麼我錯過了其他明顯的東西,或者可能與Moq/NUnit/.NET Framework的版本有關。 您能否確認您使用的測試版本? – Brendan 2010-08-13 03:20:52

+0

除此之外,針對3.5與Moq 3.1.416相同的代碼通過測試罰款...所以很想知道您的示例是否與.NET Framework 4.0一起使用 – Brendan 2010-08-13 03:29:38

+0

好吧 - 所以在更多地玩過後,我發現Moq的版本正在發揮所有的作用。到目前爲止,我使用的是4.0.10810.8,並且總是出現這個錯誤。只要我刪除對這個版本的引用,然後引用4.0.10501.6,一切都會變綠! 非常感謝您的回覆,我會將其標記爲答案,因爲您是迄今爲止唯一試圖幫助我的人。 – Brendan 2010-08-13 03:41:29

4

是的,我對NET40有與Moq.4.0.10810.8相同的問題...當我降級到版本4.0.10531.7時,一切都變綠了!

+0

謝謝!我也使用這個,並且在過去的兩天裏也遇到同樣的問題。降級立即解決它。 – reach4thelasers 2010-08-13 18:11:28