惩戒被测方法内部初始化的对象

问题描述 投票:0回答:1

我想测试哪些instatiates内它的另一个类的类。它是instatinated级呼叫我想嘲笑。

这是可能的,或者是他们周围/办法更简单的方法,我失踪?

下面我写了这仍然具有相同的problemts作为我的主要代码简单的例子。

public interface my_interface
{
    int returns_25();
}

public class class_i_want_to_mock : my_interface
{
    public int returns_25()
    {
        // TEST SHOULD FAIL SO NEED MOCK TO PASS THE CASE
        return 7645745;
    }
}

在另一个命名空间(它可以访问):

public class class_to_test
{
        public static int returns_25()
        {
            class_i_want_to_mock _tempClass= new class_i_want_to_mock ();

            // Will return 7645745 unless moq changes return value
            int _temp_int = _tempClass.returns_25()
            return _temp_int;
        }
}

我的测试(这失败):

    [Test]
    public void test_returns_25()
    {
        // Mock 
        Mock<my_interface> myMock = new Mock<my_interface>();
        myMock.Setup(m => m.returns_25()).Returns(25);

        // Act
        int return_number = class_to_test.returns_25();

        // Assert
        Assert.AreEqual(25, return_number);
    }
c# testing mocking moq
1个回答
0
投票

这里是工作的代码由于从上面JSteward注射想法。

代码是相同的顺序

public interface my_interface
{
    int returns_25();
}

public class class_i_want_to_mock : my_interface
{
    public int returns_25()
    {
        // TEST SHOULD FAIL SO NEED MOCK TO PASS THE CASE
        return 7645745;
    }
}

下节课,注意接口的注入

public class class_to_test
{
        public static int returns_25(my_interface _temp_interface)
        {

            // Will return 7645745 unless moq changes return value
            int _temp_int = _temp_interface.returns_25()
            return _temp_int;
        }
}

和测试。注意素类的对象,必须使用(myMock.Object)

[Test]
public void test_returns_25()
{
    // Mock 
    Mock<my_interface> myMock = new Mock<my_interface>();
    myMock.Setup(m => m.returns_25()).Returns(25);

    // Act
    int return_number = class_to_test.returns_25(myMock.Object);

    // Assert
    Assert.AreEqual(25, return_number);
}
© www.soinside.com 2019 - 2024. All rights reserved.