繁体   English   中英

C#单元测试-检查是否达到私有方法

[英]C# Unit testing - check if a private method was reached

我正在使用C#MOQ库。

可以说我想为这段代码创建一个UnitTest

if(condition){
    privateMethod();
}
else{
    logger.info("didn't hit")
}

我想检查privateMethod被击中,因为它是私有的,所以无法使用Verify函数。 我怎样才能做到这一点?

我考虑过添加一个专门用于单元测试的Status成员,该成员将在退出测试方法之前保留最后一个位置。

不要测试私有方法。 它们是该类的私有实现细节。 您应该只测试执行公共方法的结果。

正确设计的SOLID代码绝不会使您处于需要私人模拟的位置。

根据您是否要更改设计,可以采取以下几种方法:

  • 不要尝试嘲笑私人细节,而应关注公共API(对设计问题无济于事)
  • 提取私有方法进行分类,引入依赖关系(长期解决方案,改进设计并易于测试代码)
  • 使私有方法受保护,在测试中覆盖(对设计问题没有帮助,可能不会产生有价值的测试)

无论您选择哪个,我都由您决定。 但是,我将再强调一次- 模拟私有方法不是单元测试,库或工具问题-它是设计问题 ,因此最好可以解决。

我使用MSTest,这是我在测试类中调用私有方法的解决方案:

Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(retVal);

它使用PrivateObject

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM