gpt4 book ai didi

c# - 如何使用最小起订量测试调用 protected 助手的代码

转载 作者:可可西里 更新时间:2023-11-01 08:33:40 24 4
gpt4 key购买 nike

我目前运行的测试如下所示:

// In Blah.cs
public class ClassUnderTest

{

public bool MethodUnderTest()

{

// Do a bunch of stuff...

return HelperMethod();

}



protected virtual bool HelperMethod()

{

bool success = false;

// Proprietary Hardware Access.

// Database Calls.

// File System Modifications.

return success;

}

}


// In TestBlah.cs

public class TestStub : ClassUnderTest

{

public bool HelperMethodReturnValue;



protected override bool HelperMethod()

{

return HelperMethodReturnValue;

}

}



[TestClass]

public class TestingClass

{

[TestMethod]

public void ClassUnderTest_MethodUnderTest_TestHelperReturnsTrue()

{

var stub = new TestStub();

stub.HelperMethodReturnValue = true;

Assert.IsTrue(stub.MethodUnderTest());

}



[TestMethod]

public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()

{

var stub = new TestStub();

stub.HelperMethodReturnValue = false;

Assert.IsFalse(stub.MethodUnderTest());

}

}

上面的内容对于简单的事情来说看起来不错,但是 stub 类会以指数方式快速变大和变复杂。我想用 Moq 替换 stub 类。但是,这不会编译,因为出于某种原因我无法在 protected 方法上设置返回值。

[TestMethod]

public void ClassUnderTest_MethodUnderTest_TestHelperReturnsFalse()

{

var mockClass = new Mock<ClassUnderTest>();
mockClass.Protected().Setup("HelperMethod").Returns(false);

Assert.IsFalse(mockClass.Object.MethodUnderTest());

}

有人知道我会怎么做吗?我可以用最小起订量做到这一点吗?

最佳答案

查看 moq source code猜想您需要显式调用安装程序的通用版本。非泛型版本似乎用于 void 方法。所以试试

mockClass.Protected().Setup<bool>("HelperMethod").Returns(false);

除此之外,我建议重新考虑您的类设计。如果 HelperMethod() 正在做这样一堆事情,那么值得将它自己的类作为依赖注入(inject)到 ClassUnderTest 中。测试模拟对象,而不是使用模拟对象来测试“真实”的东西,并不是模拟框架的目的(至少一开始不是)。

关于c# - 如何使用最小起订量测试调用 protected 助手的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851684/

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