gpt4 book ai didi

c# - 如何避免或跳过一些用于 XUnit 测试的私有(private)方法?

转载 作者:行者123 更新时间:2023-12-04 12:15:28 25 4
gpt4 key购买 nike

假设我编写了一个单元测试来测试 XUnit 中的公共(public)方法。

[Fact]
public void MethodA_WhenSomething_ThenReturnNull()
{
// Code removed for brevity.

// Assert
}
这是方法A。
public void MethodA() {
MethodOne();
MethodTwo();
MethodThree();
}
MethodOne、MethodTwo 和 MethodTree 都是私有(private)方法。有没有办法在为 MethodA 运行单元测试时跳过私有(private)方法(即 MethodTwo)?我想跳过 methodTwo 的原因是因为 methodTwo 调用了一个存储过程,它会导致 Xunit 出错。但我知道存储过程运行良好,没有问题,所以我可以跳过这个方法。
而此刻,我正在使用这种方式。
public void MethodA() {
MethodOne();

#if DEBUG == false
MethodTwo();
#endif

MethodThree();
}
如果有更好的方法,我不想放 If DEBUG

最佳答案

此类问题通常通过 Moq.Protected 解决.
所以,你需要改变private访问 protected至少对于 MethodTwo .
但我建议将所有访问器更改为 protected .

public class SomeClass
{
public void MethodA()
{
MethodOne();
MethodTwo();
MethodThree();
}
protected void MethodOne() { ... }
protected void MethodTwo() { ... }
protected void MethodThree() { ... }
}
有了这个,模拟设置将如下所示:
using Moq.Protected;

...
var mockSomeClass = new Mock<SomeClass>();

mockSomeClass.Protected()
.Setup("MethodTwo")
.Verifiable();
此外,您可以设置一个 Callback在测试输出中写出一些东西
const string toBeMockedMethodName = "MethodTwo";
mockSomeClass.Protected()
.Setup(toBeMockedMethodName)
.Callback(() => TestContext.Progress.Writeline($"{toBeMockedMethodName} has been called."))
.Verifiable();
引用:
  • Mocking protected members
  • Protected Members - Unit testing in C#
  • Moq - how to mock a protected method of an internal class with no parameter-less constructor
  • 关于c# - 如何避免或跳过一些用于 XUnit 测试的私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68323515/

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