【发布时间】:2012-08-04 20:27:51
【问题描述】:
如何为私有函数的输出参数创建单元测试?
我的服务层:
private int LoadProduct(string productId, out IProduct product)
{
product = this.Load(productId);
return ErrorCodes.Success;
}
测试用例:
[Test]
public void LoadProductTest()
{
var offerService = new OfferProcessor();
var privateOfferService = new PrivateObject(offerService);
IProduct myProduct = null;
var result = (int)privateOfferService.Invoke("LoadProduct",
new object[] {"AnId", myProduct });
Assert.That(result, Is.EqualTo(ErrorCodes.Success));
Assert.That(myProduct, Is.NotNull());
}
上述测试用例无法编译。如何传递 Invoke 一个 out 参数,然后在调用后访问它?
【问题讨论】:
-
一般来说,我总是尝试通过公共接口测试私有方法。严格来说,不应该直接对私有成员进行单元测试。
-
@rboarman....测试方法旨在测试面向外部的功能。可以从类外部调用的功能。私有方法已通过该类的令人满意的测试。要测试 LoadProduct(),您需要调用访问它的公共方法。
-
我认为返回实际对象被认为是一种很好的做法,并且不对返回值使用错误代码。如果有错误,抛出异常。如果您返回实际的业务对象,则不会出现此问题。
标签: c# visual-studio-2010 unit-testing nunit