我试图写ServiceStack服务简单的单元测试,我会通过他们在网上已经测试和几个线程在这里。这是我想要完成的大部分细节的主线 - Unit Test HTTPRequest Headers with ServiceStack。单元测试
不过,我对着注射的IDbConnection对象到服务的问题。在webmethod中,使用OrmLite的GetDictionary方法填充字典对象。但我无法嘲笑它,因为GetDictionary是扩展方法。
private Mock<IDbConnection> _dbConnectionMock;
private Dictionary<string, string> _nameValuePairs;
[SetUp]
public void SetUp()
{
_dbConnectionMock = new Mock<IDbConnection>();
_nameValuePairs = new Dictionary<string, string>()
{
{"name","test"},
{"Updatedby", "5/23/12 7:00:15 AM"},
{"Address", "212 Adam St."}
};
}
在测试方法
var service = new CustomerLookupService(_dbConnectionMock.Object);
var response = (HttpResult)service.Any(new CustomerLookup { name = "test" });
//assert statements
如果GetDictionary方法不能嘲笑,我甚至愿意叫击中DB Web方法,这个我需要创建APPHOST。
它的工作原理就像一个魅力。我有一个疑问,如果我们有多个读取操作来检索方法中的字典,如何模拟测试中的字典。我们是否需要按照相同的顺序提及模拟对象。 – Sunny 2013-04-03 04:22:15
如果您正在测试将执行许多数据库操作且每个操作返回相同Type的方法,则此解决方案可能不是最好的。也许可以用犀牛制品基于“调用顺序”上实现返回不同的充值 - http://stackoverflow.com/questions/5609589/ordering-method-return-values-with-rhino-mock-stubs – paaschpa 2013-04-03 04:33:06
感谢回复。你知道多个数据库操作的任何替代想法吗?实际上,我喜欢这种方法,我不需要通过违反DRY原则来创建单个存储库。 – Sunny 2013-04-03 04:56:56