小编rob*_*b23的帖子

使用 Moq,如何模拟使用局部变量的方法

Moq 的新手,这是一个非常简单的示例。我想模拟对我的方法“string getCode(int someID)”中使用的“int steamTest(int a, int b)”方法的调用。在 getCode 中声明并设置了用于冒烟测试的变量。问题是当我模拟对smoothTest 的方法调用时,我总是在getCode 中得到“0”的结果,但我想看到我的预定义结果“20”。我发现的唯一解决方法是重载方法并传入所有变量。但是,我不想这样做,因为我要测试的许多方法都声明并使用局部变量。使用 Moq 测试此方法的最佳方法是什么?谢谢

// Example A
public string getCode(int someID)
{
    int x = 5;
    int y = 5;
    int z = _dataAccess.smokeTest(x, y);

    return _dataAccess.getCode(someID);
}

// NOTE: Doesn't work as wanted
[Test]
public void test_getCode_TestB()
{
    var x = It.IsAny<int>();
    var y = It.IsAny<int>();

    // NOTE: "20" is not returned, 0 is returned instead because local variables are used
    _mockDataAccess.Setup(m => m.smokeTest(x, y)).Returns(20);
    _mockDataAccess.Setup(m => m.getCode(234)).Returns("def345");

    var …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq

4
推荐指数
1
解决办法
5364
查看次数

标签 统计

c# ×1

moq ×1

unit-testing ×1