簡體   English   中英

如何從RhinoMocks解決System.InvalidOperationException?

[英]How to solve System.InvalidOperationException from RhinoMocks?

為了進行測試,我使用了NUnit和RhinoMocks。 昨天發生了一個錯誤,我無法解決。 我在互聯網上尋找解決方案。 我找到了很多可能的解決方案,但就我而言,它不能解決問題。

異常堆棧跟蹤:

   System.InvalidOperationException : Previous method 'IContainer.GetImageHandler();' requires a return value or an exception to throw.
   at Rhino.Mocks.Impl.RecordMockState.AssertPreviousMethodIsClose()
   at Rhino.Mocks.Impl.RecordMockState.Replay()
   at Rhino.Mocks.MockRepository.ReplayCore(Object obj, Boolean checkInsideOrdering)
   at Rhino.Mocks.RhinoMocksExtensions.Expect(T mock, Function`2 action)
   at ImageControllerTest.UnitTests.ImageControllerTest.SmokeTest() 

編碼:

    [TestFixture]
public class ImageControllerTest
{
    [Test]
    public void SmokeTest()
    {
        var container = MockRepository.GenerateStrictMock<IContainer>();
        var imageController = new ImageController(container);

        string imagePhysicalLocation = @"c:\image.jpg";

        Stream imageStream = null;
        container.Expect(x => x.GetImageHandler().LoadImage(imagePhysicalLocation)).Repeat.Once().Return(imageStream);

        container.Expect(x => x.GetImageHandler().ConvertToGrayScale(imageStream)).Repeat.Once().Return(imageStream);

        var dimensions = new KeyValuePair<int, int>(200, 200);

        container.Expect(x => x.GetImageHandler().GetDimensions(imageStream)).Repeat.Once().Return(dimensions);

        imageController.Execute(imagePhysicalLocation);

        container.VerifyAllExpectations();
    }
}

public interface IContainer
{
    IImageHandler GetImageHandler();
}

public interface IImageHandler
{
    Stream LoadImage(string physicalLocation);
    KeyValuePair<int, int> GetDimensions(Stream image);
    Stream ConvertToGrayScale(Stream image);
}

public class ImageController
{
    private readonly IContainer container;

    public ImageController(IContainer container)
    {
        this.container = container;
    }

    public void Execute(string imagePhysicalLocation)
    {
        Stream image = container.GetImageHandler().LoadImage(imagePhysicalLocation);

        Stream imageInGrayScale = container.GetImageHandler().ConvertToGrayScale(image);

        container.GetImageHandler().GetDimensions(imageInGrayScale);
    }
}

有誰知道我該如何解決這個錯誤?

非常感謝。

喬迪

您需要為ImageHandler提供另一個模擬,如下所示:

[TestFixture]
public class ImageControllerTest
{
    [Test]
    public void SmokeTest()
    {
        var container = MockRepository.GenerateStrictMock<IContainer>();
        var handler = MockRepository.GenerateStrictMock<IImageHandler>();
        var imageController = new ImageController(container);

        string imagePhysicalLocation = @"c:\image.jpg";

        Stream imageStream = null;

        container.Expect(x => x.GetImageHandler()).Return(handler);


        handler.Expect(x => x.LoadImage(imagePhysicalLocation)).Repeat.Once().Return(imageStream);

        handler.Expect(x => x.ConvertToGrayScale(imageStream)).Repeat.Once().Return(imageStream);

        var dimensions = new KeyValuePair<int, int>(200, 200);

        handler.Expect(x => x.GetDimensions(imageStream)).Repeat.Once().Return(dimensions);

        imageController.Execute(imagePhysicalLocation);

        container.VerifyAllExpectations();
        handler.VerifyAllExpectations();
    }
}

public interface IContainer
{
    IImageHandler GetImageHandler();
}

public interface IImageHandler
{
    Stream LoadImage(string physicalLocation);
    KeyValuePair<int, int> GetDimensions(Stream image);
    Stream ConvertToGrayScale(Stream image);
}

public class ImageController
{
    private readonly IContainer container;

    public ImageController(IContainer container)
    {
        this.container = container;
    }

    public void Execute(string imagePhysicalLocation)
    {
        Stream image = container.GetImageHandler().LoadImage(imagePhysicalLocation);

        Stream imageInGrayScale = container.GetImageHandler().ConvertToGrayScale(image);

        container.GetImageHandler().GetDimensions(imageInGrayScale);
    }
}

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM