gpt4 book ai didi

c# - 我应该为单元测试访问 protected 方法吗?

转载 作者:行者123 更新时间:2023-11-30 17:06:46 25 4
gpt4 key购买 nike

关于this question我之前问过,我的单元测试又一次陷入困境。

我当前的问题与测试抽象 Component 类的 protected 方法有关。

我已经成功地实现了一个名为 ConcreteComponent 的模拟类,它很好地继承了抽象类的所有内容。

事实是,我在我的单元测试文件中创建了这个具体类。测试 protected 方法的唯一方法是使用私有(private)访问器。但是,我无法在单元测试所在的同一文件内创建私有(private)访问器,因此无法访问 protected 方法。

我试图将模拟具体类放在一个单独的文件中,在不同的命名空间下,现在这允许我创建一个单元测试文件现在可以使用的私有(private)访问器。它工作得很好,但后来我想我需要在单元测试所在的同一个文件中这个模拟具体类。

所以现在我有两个问题:

1) 此问题可能的解决方法是什么?

2) 为什么我不能为与单元测试类位于同一文件和命名空间内的模拟类创建私有(private)访问器?

最佳答案

可以看看PrivateObject类以在测试中访问类的非公共(public) API。它在内部使用反射。类的 protected Assets 仍然是外部客户端的 api,在这种情况下,外部客户端是子类或派生类。所以想要测试这样的 api 是可以理解的。我不建议仅仅为了测试 protected api 而污染类以公开公共(public) api。但是,由于在您的情况下派生类在测试项目中,您实际上可以提供公共(public) api 以使测试更容易并提高性能(反射会变慢,如果您正在运行测试,持续测试,因为您进行代码更改,它可能会使测试运行速度变慢,具体取决于测试次数等)。

关于c# - 我应该为单元测试访问 protected 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com