2010-10-01 24 views
5

Tôi nhận được ngoại lệMOQ 4.0: Các loại initializer cho 'Moq.Mock`1' ném một ngoại lệ

Loại initializer cho 'Moq.Mock`1' ném một ngoại lệ.

sử dụng Moq 4.0 Tôi đã kiểm tra xung quanh trên một vài diễn đàn và họ sử dụng phiên bản Moq-NoCastle. Tôi đã thử cả hai điều này và phiên bản trong thư mục Moq. Cả hai đều có cùng kết quả.

Tôi đã có giải pháp với 2 dự án, một cho giao diện của tôi, một cho thử nghiệm của tôi. Dự án chính của tôi có 2 file:

IMyInterface.cs:

using System; 

namespace Prototype 
{ 
    public interface IMyInterface 
    { 
     int Value { get; set; } 
     void ProcessValue(); 
     int GetValue(); 
    } 
} 

tập tin program.cs của tôi có chỉ là mã mặc định đó là tạo ra với dự án.

dự án thử nghiệm của tôi có một tập tin duy nhất cho bài kiểm tra giả của tôi - TestProgram.cs

using System; 
using NUnit.Framework; 
using Moq; 

namespace Prototype.UnitTests 
{ 
    [TestFixture] 
    public class TestProgram 
    { 
     Mock<IMyInterface> mock; 

     [TestFixtureSetUp] 
     void TestSetup() 
     { 
      mock = new Mock<IMyInterface>(); 
      mock.Setup(x => x.GetValue()).Returns(2); 
     } 

     [Test] 
     public void RunTest() 
     { 
      IMyInterface obj = mock.Object; /* This line fails */ 
      int val = obj.GetValue(); 
      Assert.True(val == 2); 
     } 
    } 
} 

Theo tài liệu tất cả là tốt và thích hợp, và biên dịch độc đáo. Vấn đề xảy ra khi tôi thử chạy thử nghiệm. Đường dẫn đến dòng được đánh dấu ở trên và bị treo với ngoại lệ:

Trình khởi tạo kiểu cho 'Moq.Mock`1' đã ném một ngoại lệ.

Tôi không thể thấy điều gì xảy ra ở đây, bất kỳ ai cũng có thể làm sáng tỏ điều đó?

Trả lời

4

tôi đã có thể chạy thử nghiệm của bạn thành công sau khi thực hiện những thay đổi sau:

  1. Made TestSetup() công
  2. Trong RunTest, thay đổi int val = obj.Value-int val = obj.GetValue() - đây là chỉ để có được Assert để vượt qua.

Tôi không quen với NUnit (tôi sử dụng xUnit), nhưng tôi đoán là TestSetup() là riêng tư là vấn đề. Khi phương thức đó là riêng tư, NUnit hiển thị ngoại lệ này cho tôi:

Prototype.UnitTests.TestProgram.RunTest: 
Invalid signature for SetUp or TearDown method: TestSetup 

Có thể bạn đang sử dụng phiên bản NUnit cũ xử lý tình huống này một cách khác (tôi vừa tải xuống 2.5.7.10213).

HTH

+0

Cảm ơn. Có vẻ như người truy cập 'công khai' cần được thiết lập trên thiết lập. Những gì tôi không thể tìm ra là khi tôi sử dụng trình gỡ rối để gỡ lỗi kiểm tra, nó thực sự chạy qua phương thức đó. Vì vậy, giả định của tôi là nó không cần phải được công khai. – BenAlabaster

+0

Bạn được chào đón.Có vẻ như NUnit đang cư xử kỳ lạ, và không đưa ra phản hồi tốt. –

2

Điều này xảy ra với tôi khi tôi cập nhật Castle.Core NuGet Gói lên phiên bản 4.0.0. Một cái gì đó thay đổi đó là không hoạt động đúng với Moq mới nhất (v4.5.30) tại thời điểm này.

Tôi đã giải quyết vấn đề này bằng cách quay lại Castle.Core phiên bản 3.3.3.

Các vấn đề liên quan