如何为私有函数的out参数创建单元测试?
我的服务层:
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参数,然后在调用后访问它?
答案 0 :(得分:5)
尝试保存通过调用调用的对象数组。
object[] args = new object[] { "AnId", myProduct };
var result = (int)privateOfferService.Invoke("LoadProduct", args);
Assert.That(args[1], Is.NotNull());
答案 1 :(得分:3)
如果您确实需要测试此方法,可以将其标记为内部,并为测试命名空间指定类的InternalsVisibleTo属性。但是,只是测试公共界面。
答案 2 :(得分:3)
我认为返回实际对象被认为是一种好习惯,而不是使用错误代码来返回值。如果有错误,请抛出异常。如果您返回实际的业务对象,则不会出现此问题。
由于您没有说明您的代码无法编译,我假设您的测试方法无法访问私有方法。如果你这样做,VS将允许你测试私有方法(右键单击方法并选择Create Unit Tests ...):