如何用“out”参数编写私有函数的C#测试用例?

时间:2012-08-07 19:08:09

标签: c# visual-studio-2010 unit-testing nunit

如何为私有函数的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参数,然后在调用后访问它?

3 个答案:

答案 0 :(得分:5)

尝试保存通过调用调用的对象数组。

object[] args = new object[] { "AnId", myProduct };
var result = (int)privateOfferService.Invoke("LoadProduct", args);
Assert.That(args[1], Is.NotNull());

https://stackoverflow.com/a/2438069/1311351

答案 1 :(得分:3)

如果您确实需要测试此方法,可以将其标记为内部,并为测试命名空间指定类的InternalsVisibleTo属性。但是,只是测试公共界面。

答案 2 :(得分:3)

我认为返回实际对象被认为是一种好习惯,而不是使用错误代码来返回值。如果有错误,请抛出异常。如果您返回实际的业务对象,则不会出现此问题。

由于您没有说明您的代码无法编译,我假设您的测试方法无法访问私有方法。如果你这样做,VS将允许你测试私有方法(右键单击方法并选择Create Unit Tests ...):

enter image description here