gpt4 book ai didi

.net - 你如何指定一个方法只能被单元测试调用?

转载 作者:行者123 更新时间:2023-12-02 06:42:55 26 4
gpt4 key购买 nike

如何限制用户调用仅用于单元测试的方法?如果调用不是在单元测试的上下文中进行的,我正在考虑抛出异常,但我不知道对于在调试下构建的项目,测试是否具有诸如“DEBUG”之类的符号。

我可以使用它的一个实例是 DTO 及其身份。为了正确模拟持久化 DTO,我需要为我将使用的实体分配一个 Id。我可以通过为该特定目的添加一个方法或添加一个构造函数来做到这一点,但我想清楚的是,将 Id 分配给实体应该只适用于单元测试,并且永远不应该在实际代码本身上完成。

最佳答案

一般来说,不建议只从单元测试中调用方法。理想情况下,被测代码在单元测试中的行为不应与在现实世界中的行为不同。也就是说,有时这样的技巧是不可避免的,例如在尝试为从未设计为可单元测试的遗留代码编写测试时。

即使在这些情况下,“仅测试”方法也应该是一个临时的捷径,而不是一个长期的解决方案。所以我不会太担心检测是否从外部单元测试调用该方法。相反,一旦我用测试很好地覆盖了代码,就会努力重构它以摆脱“仅测试”方法和其他临时脚手架,努力实现更清洁、更安全的设计。

如果您详细说明您的方法的实际用途,我们或许可以提供更具体的建议。

关于这个主题的推荐阅读是Working Effectively with Legacy Code .

更新

感谢您的解释。我们在遗留项目中的几个地方也有这样的检查,所以我知道有时这是不可避免的。幸运的是,我们还不需要为这些地方编写单元测试(好吧,如果我们的代码中只有这些地方没有单元测试,我会很高兴:-)。

我想到了一个替代解决方案:将实体 ID 检查提取到一个单独的(虚拟)方法中(可能在一个单独的接口(interface)中)并在单元测试中覆盖/模拟它。这样,您只需几行额外的代码就可以消除对仅测试方法的需求。希望这会有所帮助:-)

关于.net - 你如何指定一个方法只能被单元测试调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907157/

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