Tôi có một bài kiểm tra đơn vị để xác minh rằng một đối tượng (nói Foo
) sẽ gọi phương thức nhất định (giả sử Bar
) khi một sự kiện được kích hoạt với một số sự kiện nhất định. Để thử phương pháp nói, tôi sử dụng ảo và còn sơ khai các Foo
lớpLàm thế nào để buộc moq gọi cho nhà xây dựng?
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
mockEventProvider.Raise(x => x.MyEvent += null, myEventArgs) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
Tuy nhiên, thất bại trên, Bar sẽ không được gọi, rõ ràng bởi vì đối tượng Foo không phải là sự kiện xây dựng. Tuy nhiên, nếu tôi thêm một dòng như sau:
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
var workAround = stubbedFoo.Object //adding this workaround will work
mockEventProvider.Raise(x => x.MyEvent += null, myEventArgs) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
Nó sẽ hoạt động, bởi vì gọi điện đang bật. Có một giải pháp thanh lịch hơn so với thêm dòng này?
tôi thấy .. bạn có nghĩ rằng đây là một lỗ hổng trong moq? –
Tôi muốn nói đây có lẽ là một quyết định có chủ ý, nhưng moq là nguồn mở để bạn có thể thay đổi nó nếu bạn muốn – devshorts