![]() |
1
4
单元测试就是通过公共接口测试对象。这可能很难,这就是为什么写作 可测试的 代码有时被称为 艺术 . 不是每个人都能马上编写可测试代码,这就是为什么人们发明了XP方法首先编写测试。听起来不切实际,实际可行。 但是,如果你 绝对需要 为了测试私有函数,下面是我根据自己的喜好考虑的方法列表:
|
![]() |
2
13
有一个 真正地 我通常在单元测试中使用的丑陋但非常有用的黑客:
不要将它用于单元测试以外的任何事情!
而且,这种方法也有一些限制——首先,不是所有private都有前缀
另一个不太好的方法是通过铸造。您创建了一个具有相同字段但全部为公共字段的结构,并将其转换为指向私有结构的指针。但是,这样做的缺点是,类需要完全匹配:
…但是,如果编译器处理您的代码,您可能会遇到令人不快的意外,因此不要将其用于生产代码。 |
![]() |
3
4
这是几年前热议的话题,但普遍接受的结果是你应该只测试 外部可见行为 所以不需要访问它的内部数据和行为。 虽然这在最初听起来可能没有帮助,但是您可以将类中要测试的私有部分提取到其外部行为的新类中。 是 你想测试的行为。然后您可以用普通的方法测试这些类,并且您将改进总体设计。 |
![]() |
4
4
我也会去定义黑客, 但也要放置一个define class struct以使隐式私有类数据也公开。 我一定不同意德米特里的观点: 1.)这会将接口添加到我的生产代码中,只是为了测试,并且会违反我的封装。我不希望客户端访问我的私人数据 2.)同样,如1.)所示。-好主意,如果这些接口实际上只公开用于测试 3.)只有在访问受到保护的情况下才有效,这在某种程度上也会影响封装。 4.)也意味着修改我的生产代码只是为了测试,甚至在生产代码和我的测试代码之间创建耦合!!!! 5.)从你的角度看,这是正确的,我宁愿有丑陋的测试代码,也不愿有丑陋的生产代码:) |
![]() |
5
1
当我同意每个人说“不要 做 那就是,“有时候你在一个大型项目中工作,在这个项目中,你没有自由去对测试中的类进行你想要的所有更改。对于这些情况,我更喜欢朋友声明而不是公开/私人的重新定义黑客。 我知道怎么做了 UnitTest++ 下面是一个带有“dealInternal”保护/私有方法的“deck”类的示例,您希望从“内部”测试中使用该方法。
|
![]() |
6
0
最好避免测试私人物品。为什么要测试私有域?当private_字段设置为无效值时,会出现什么错误?是否可以测试这种错误行为而不是断言错误的值? 其他选项包括
|