Tôi muốn thử chỉ phương pháp GetValue
của lớp sau, sử dụng Moq:mocking một phần thời gian lên lớp Moq
public class MyClass
{
public virtual void MyMethod()
{
int value = GetValue();
Console.WriteLine("ORIGINAL MyMethod: " + value);
}
internal virtual int GetValue()
{
Console.WriteLine("ORIGINAL GetValue");
return 10;
}
}
Tôi đã đọc một chút cách này nên làm việc với Moq. Giải pháp mà tôi tìm thấy trực tuyến là sử dụng thuộc tính CallBase
, nhưng điều đó không hiệu quả đối với tôi.
Đây là thử nghiệm của tôi:
[Test]
public void TestMyClass()
{
var my = new Mock<MyClass> { CallBase = true };
my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine("MOCKED GetValue")).Returns(999);
my.Object.MyMethod();
my.VerifyAll();
}
Tôi mong rằng Moq sử dụng việc thực hiện hiện tại của MyMethod
và gọi phương thức chế giễu, kết quả đầu ra sau đây:
ORIGINAL MyMethod: 999
MOCKED GetValue
nhưng đó là những gì tôi get:
ORIGINAL GetValue
ORIGINAL MyMethod: 10
và sau đó
Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()
Tôi có cảm giác, rằng tôi đã hiểu nhầm điều gì đó hoàn toàn. Tôi đang thiếu gì ở đây? Bất kỳ trợ giúp sẽ được đánh giá
thể trùng lặp của [Khi chế giễu một lớp học với Moq, làm thế nào tôi có thể CallBase chỉ cụ thể phương pháp?] (http://stackoverflow.com/questions/2822947/when-mocking-a-class-with-moq-how-can-i-callbase-for-just-specific-methods) – StriplingWarrior
Nếu bạn thực hiện 'của bạn Phương thức GetValue' 'public' thay vì' internal' nó hoạt động. Tôi không biết tại sao có lẽ đây là một hạn chế của proxy năng động lâu đài, hoặc nó là một lỗi một Moq, hoặc đây là hành vi dự định. Dù sao nếu bạn để nó như là nội bộ, bạn không thể đặt mã sản xuất của bạn đến một hội đồng khác nhau trừ khi bạn sử dụng InternalVisibleTo. – nemesv
có thể trùng lặp của [Xác minh một phương thức đã được gọi] (http://stackoverflow.com/questions/1980108/verifying-a-method-was-called) – nemesv