Tôi đang sử dụng bản beta của Microsoft Fakes trong Visual Studio 11. Làm thế nào tôi có thể xác minh rằng phương thức của một phụ thuộc được gọi bởi hệ thống của tôi đang được kiểm tra?Làm cách nào tôi có thể xác minh rằng bản gốc của Microsoft Fakes (beta)/shim được gọi (như AssertWasCalled in Rhino Mocks)?
Trả lời
Khi chức năng xác minh không được bao gồm trong bản Beta Beta của Microsoft, mã bên dưới là một thử nghiệm cơ bản cho dù phương thức phụ thuộc có được gọi hay không. Bạn có thể tăng cường kiểm tra true
để kiểm tra các giá trị tham số hoặc các điều kiện khác của cuộc gọi thích hợp.
Test:
[TestMethod]
public void TestMethod1()
{
var secondDoItCalled = false;
var secondStub = new Fakes.ShimSecond();
secondStub.DoIt =() => { secondDoItCalled = true; };
var first = new First(secondStub);
first.DoIt();
Assert.IsTrue(secondDoItCalled);
}
Lớp học:
public class First
{
readonly Second _second;
public First(Second second) { _second = second; }
public void DoIt() {
//_second.DoIt();
}
}
public class Second {public void DoIt(){}}
Bỏ ghi chú những dòng trên để xem qua bài kiểm tra.
Một tùy chọn khác mà bạn có để thực hiện xác minh hành vi với khung Microsoft Fakes là sử dụng lớp StubObserver có trong không gian tên Microsoft.QualityTools.Testing.Fakes.Stubs. Sử dụng khung công tác, bạn tạo ra một nhánh cho sự phụ thuộc của bạn. Sau đó, trên Stub của bạn, bạn có thể đặt thuộc tính InstanceObserver thành một StubObserver mới. Sử dụng lớp StubObserver, bạn có thể "truy vấn" các cuộc gọi phương thức được thực hiện cho sự phụ thuộc của bạn. Phương pháp thử nghiệm của bạn sẽ giống như dưới đây
//Arrange
var dependency = new StubIDependency { InstanceObserver = new StubObserver() };
var sut = new SystemClass(dependency);
// Act
sut.DoSomething();
// Assert
var observer = (StubObserver)dependency.InstanceObserver;
Assert.IsTrue(
observer.GetCalls().Any(call => call.StubbedMethod.Name == "DoSomething"));
Có một cái nhìn bài này: http://www.peterprovost.org/blog/2012/11/29/visual-studio-2012-fakes-part-3/
Cheers
Có thể áp dụng bằng cách nào đó để trường hợp của shimming bởi 'AllInstances'? – SerG