什么是NSubstitute相当于Rhino Mocks Is.Anything

时间:2016-07-27 09:08:32

标签: unit-testing nsubstitute

我有很多测试由Rhino Mocks的另一位开发人员编写。我们现在使用NSubstitute,所以我在NSubstitute重新编写测试。我重写了除了Is.Anything之外的其他东西。在下面的例子中,什么是NSubstitute写Is.Anything的方式?我首先展示了Rhino Mocks,然后又展示了NSubstitute考试。

Rhino Mocks:

using Rhino.Mocks;

namespace ClassUnderTest.Tests
{
    class TestExample_NSubstitute_Tests
    {
        private const int ClassUnderTestLicenseFeatureID = 5106;
        private IMessenger messageProvider;
        private IEventAggregator eventAggregator;

        private ClassUnderTest BuildValidClassUnderTestObject()
        {
            ClassUnderTest newClassUnderTest = new ClassUnderTest(
                    eventAggregator,
                    messageProvider);
            return newClassUnderTest;
        }

        [TestMethod]
        public void ClassUnderTestBroadcastInstrumentState_NoArgs_BaseClassMethodCall()
        {
            //ARRANGE
            ClassUnderTest classUnderTest = BuildValidClassUnderTestObject();

            //ACT
            classUnderTest.BroadcastState();

            //ASSERT
            messageProvider.AssertWasCalled(a => a.ClassToDoWork(
                Arg<OrchestrationInstrumentRuntimeServiceModel>.Is.Anything, 
                Arg<long>.Is.Anything));
            Assert.IsNotNull(classUnderTest);
        }
    }
}

NSubstitute示例:

using NSubstitute;

namespace ClassUnderTest.Tests
{
    class TestExample_NSubstitute_Tests
    {
        private const int ClassUnderTestLicenseFeatureID = 5106;
        private IMessenger messageProvider;
        private IEventAggregator eventAggregator;

        private ClassUnderTest BuildValidClassUnderTestObject()
        {
            ClassUnderTest newClassUnderTest = new ClassUnderTest(
                    eventAggregator,
                    messageProvider);
            return newClassUnderTest;
        }

        [TestMethod]
        public void ClassUnderTestBroadcastInstrumentState_NoArgs_BaseClassMethodCall()
        {
            //ARRANGE
            ClassUnderTest classUnderTest = BuildValidClassUnderTestObject();

            //ACT
            classUnderTest.BroadcastState();

            //ASSERT
            messageProvider.Received().ClassToDoWork(
                Arg<OrchestrationInstrumentRuntimeServiceModel>.Is.Anything,//How do I re-write Is.Anything in NSubstitute?
                Arg<long>.Is.Anything);//How do I re-write Is.Anything in NSubstitute?
            Assert.IsNotNull(classUnderTest);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我自己找到了答案......

使用NSubstitute;

命名空间ClassUnderTest.Tests {     class TestExample_NSubstitute_Tests     {         private const int ClassUnderTestLicenseFeatureID = 5106;         私人IMessenger messageProvider;         私有IEventAggregator eventAggregator;

    private ClassUnderTest BuildValidClassUnderTestObject()
    {
        ClassUnderTest newClassUnderTest = new ClassUnderTest(
                eventAggregator,
                messageProvider);
        return newClassUnderTest;
    }

    [TestMethod]
    public void ClassUnderTestBroadcastInstrumentState_NoArgs_BaseClassMethodCall()
    {
        //ARRANGE
        ClassUnderTest classUnderTest = BuildValidClassUnderTestObject();

        //ACT
        classUnderTest.BroadcastState();

        //ASSERT
        messageProvider.Received().ClassToDoWork(
            Arg.Any<OrchestrationInstrumentRuntimeServiceModel>(),
            Arg.Any<long>();
        Assert.IsNotNull(classUnderTest);
    }
}

}