Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证是否在模拟类中调用了方法_C#_Unit Testing_Mocking_Rhino Mocks - Fatal编程技术网

C# 验证是否在模拟类中调用了方法

C# 验证是否在模拟类中调用了方法,c#,unit-testing,mocking,rhino-mocks,C#,Unit Testing,Mocking,Rhino Mocks,如果我们有这样的东西: public class test { public void Condition() { if (x == y) { methodOne(); } else { methodTwo(); } } } 如何使用Rhino Moc

如果我们有这样的东西:

public class test
   {
       public void Condition()
       {
           if (x == y)
           {
               methodOne();
           }
           else
           {
               methodTwo();
           }
       }
   }

如何使用Rhino Mock编写单元测试来断言是否调用了
methodOne

您通常不会为正在测试的类创建Mock。您可以为其依赖项创建模拟

因此,如果您的代码实际上是:

public class Test
{
    private readonly IFoo foo;

    public Test(IFoo foo)
    {
        this.foo = foo;
    }

    public void Condition()
    {
        if (x == y)
        {
           foo.MethodOne();
        }
        else
        {
            foo.MethodTwo();
        }
    }
}
。。。然后为
IFoo
创建一个mock,并将其传递给您测试的
Test
实例,这样做是有意义的


虽然部分模拟可以让您测试是否调用了同一类中的方法,但我通常不会这样做。测试您是否可以看到调用
MethodOne
MethodTwo
的效果,您通常不会为正在测试的类创建模拟。您可以为其依赖项创建模拟

因此,如果您的代码实际上是:

public class Test
{
    private readonly IFoo foo;

    public Test(IFoo foo)
    {
        this.foo = foo;
    }

    public void Condition()
    {
        if (x == y)
        {
           foo.MethodOne();
        }
        else
        {
            foo.MethodTwo();
        }
    }
}
。。。然后为
IFoo
创建一个mock,并将其传递给您测试的
Test
实例,这样做是有意义的


虽然部分模拟可以让您测试是否调用了同一类中的方法,但我通常不会这样做。测试是否可以看到调用
MethodOne
MethodTwo

的效果您可以将MethodOne用作虚拟方法:

public virtual void MethodOne()
{
}
并使用部分模拟:

MockRepository mock = new MockRepository();

var mockTest = mock.PartialMock<Test>();
mockTest.Expect(m => m.MethodOne());

mock.ReplayAll();
mock.VerifyAll();
MockRepository mock=newmockrepository();
var mockTest=mock.PartialMock();
Expect(m=>m.MethodOne());
mock.ReplayAll();
mock.VerifyAll();

您可以利用MethodOne作为虚拟方法:

public virtual void MethodOne()
{
}
并使用部分模拟:

MockRepository mock = new MockRepository();

var mockTest = mock.PartialMock<Test>();
mockTest.Expect(m => m.MethodOne());

mock.ReplayAll();
mock.VerifyAll();
MockRepository mock=newmockrepository();
var mockTest=mock.PartialMock();
Expect(m=>m.MethodOne());
mock.ReplayAll();
mock.VerifyAll();

假设是定义类内测试是定义类内测试