我一定要考的是處理特定的事件,並堅持它只讀Mongo的數據庫上的投影(我使用的是官方的C#蒙戈驅動程序):單元測試時,成員隱藏
public class MyObjectProjection : IHandleMessages<RegisteredEvent>
{
private MongoCollection<MyObjectView> _collection;
private MyObjectView item;
public MyObjectProjection (MongoDatabase db)
{
_collection = db.GetCollection<MyObjectView>("my-object");
}
public void Handle(RegisteredEvent message)
{
item = new MyObjectView();
item.Id = message.Id;
// some code omitted
_collection.Save(item);
}
}
我需要單元測試Handle
方法,因爲:
- 我不想進行集成測試。數據庫和收集被嘲笑,所以保存不實
- 我只是想測試的項目的消息映射
- 成員是隱藏的,我不想讓他們更多的分享範圍
我應該使用替代解決方案而不是反射或友好裝配嗎?這種情況下的最佳做法是什麼? 現在我的測試是這樣的:
[TestMethod]
public void TestMethod1()
{
// ARRANGE - some code omitted
databaseMock
.Setup(x => x.GetCollection<MyObjectView>(It.IsAny<string>()))
.Returns(collection);
collectionMock
.Setup(x => x.Save(It.IsAny<MyObjectView>()))
.Returns(It.IsAny<WriteConcernResult>);
// ACT
var handler = new MyObjectProjection(database);
handler.Handle(evt);
// ASSERT
// nothin' to assert here!
}
這個工作,但我沒有什麼時候完成Handle
方法斷言。
我寧願儘可能地限制自己,而且我真的不喜歡爲了可測試性而增加可視性的想法。我想要的就是這個,通過模擬測試。 –