希望有人可以帮助我。
我正在尝试测试一个方法(外部方法),该方法具有作为依赖项的类,该类调用另一个方法(内部方法)。这个内部方法将布尔值作为参数参数,我的问题是我到目前为止无法控制这个布尔参考参数。
(注意 - 下面显示的代码是为了说明问题编写的,而不是代码的真实含义。)
此处的MOQ文档 - https://github.com/Moq/moq4/wiki/Quickstart 概述了处理Ref / Out参数,但我没有发现它有用。
我尝试了一个有效的例子(我在这里找到了 - Assigning out/ref parameters in Moq)
public interface IService
{
void DoSomething(out string a);
}
[Test]
public void Test()
{
var service = new Mock<IService>();
var expectedValue = "value";
service.Setup(s => s.DoSomething(out expectedValue));
string actualValue;
service.Object.DoSomething(out actualValue);
Assert.AreEqual(actualValue, expectedValue);
}
但是当我尝试我想要运行的代码时,我无法让它工作。 这包括在下面。
界面
Public Interface IGetValue
Function GetValue(ByRef myBoolOfInterest As Boolean) As Single
End Interface
我想测试的代码
Public Class ClassToBeTested
Dim isProblem As Boolean
Public Function PassComparisonValues(m_GetValueGetter As IGetValue) As Boolean
Dim dPBar As Single = m_GetValueGetter.GetValue(isProblem)
Return isProblem
End Function
End Class
我为此测试的代码如下(注意 - 这是一个不同的项目)。
public void MethodToTest()
{
// Arrange
// System Under Test
ClassToBeTested myClassToBeTested = new ClassToBeTested();
// Construct required Mock
Mock<IGetValue> myMock = new Mock<IGetValue>();
bool isProblem = true;
myMock.Setup(t => t.GetValue(ref isProblem));
// Act
isProblem = myClassToBeTested.PassComparisonValues(myMock.Object);
// Assert
Assert.That(isProblem, Is.EqualTo(true));
}
我想要的是能够在ClassToBeTested中控制isProblem的内容,我发现这没有发生。 无论我做什么,它都包含错误。
希望有人可以提供帮助。
答案 0 :(得分:0)
您可以做的是在isProblem
中保护ClassToBeTested
。然后,仅从单元测试继承ClassToBeTested
并将isProblem
的值设置为预期值。
class ClassToBeTested
{
protected bool isProblem;
// code here ...
}
class TestableClassToBeTested
: ClassToBeTested
{
public TestableClassToBeTested(bool isPRoblemValue)
{
isProblem = isPRoblemValue;
}
}
public void MethodToTest()
{
// Arrange
// System Under Test
bool isProblem = true;
ClassToBeTested myClassToBeTested = new TestableClassToBeTested(isProblem);
// code here ...
}