我一定要考的是处理特定的事件,并坚持它只读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
方法断言。
我宁愿尽可能地限制自己,而且我真的不喜欢为了可测试性而增加可视性的想法。我想要的就是这个,通过模拟测试。 –