模拟idisposable.dispose()方法在C#MOQ中

发布于 2025-01-30 15:47:31 字数 1213 浏览 1 评论 0原文

下面是我需要编写测试用例的我的课程。除了 dispose()

注意:我不允许我修改类dataprovider。

请有人在写作测试用例中使用MOQ框架来帮助我。

public class DataProvider<TInput, TRequest, TResponse, TOutput>:IDataProvider<TInput,TOutput> , IDisposable where TRequest : class, new()
where TResponse : class, new()
{

    private readonly ICompose<TInput, TRequest> requestComp;
    private readonly ICompose<TResponse, TOutput> responseComp;
    private bool disposed;
    private readonly IData idata;

    public DataProvider(IConverter<TInput, TRequest> requestComp,
                           IConverter<TResponse, TOutput> responseComp,
                           IDealer dealer,
                           string passcode)
    {
        this.requestComp = requestComp;
        this.responseComp = responseComp;
        this.idata= dealer.GetCalculatedData(passcode);
    }

    public void Dispose()
    {
        if (this.disposed)
        {
            return;
        }

        this.idata?.Dispose();

        this.disposed = true;
    }

    #endregion - IDispose end


    public void GetData(TInput input)
    {
        //Do something here 
    }
}

Below class is given to me for which I need to write test case. All other test case I was able to write except for Dispose()

Note: I am not allowed to modify the class DataProvider.

Please can someone help me in writing test case for Dispose() method using Moq framework.

public class DataProvider<TInput, TRequest, TResponse, TOutput>:IDataProvider<TInput,TOutput> , IDisposable where TRequest : class, new()
where TResponse : class, new()
{

    private readonly ICompose<TInput, TRequest> requestComp;
    private readonly ICompose<TResponse, TOutput> responseComp;
    private bool disposed;
    private readonly IData idata;

    public DataProvider(IConverter<TInput, TRequest> requestComp,
                           IConverter<TResponse, TOutput> responseComp,
                           IDealer dealer,
                           string passcode)
    {
        this.requestComp = requestComp;
        this.responseComp = responseComp;
        this.idata= dealer.GetCalculatedData(passcode);
    }

    public void Dispose()
    {
        if (this.disposed)
        {
            return;
        }

        this.idata?.Dispose();

        this.disposed = true;
    }

    #endregion - IDispose end


    public void GetData(TInput input)
    {
        //Do something here 
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ペ泪落弦音 2025-02-06 15:47:31

这是一些应该解释测试每个步骤的代码。

[TestMethod]
public void Test()
{
    // Arrange.
    var mockData = new Mock<IData>();
    var mockDealer = new Mock<IDealer>();

    // Setup mockDealer so that the GetCalculatedData returns the object from mockData.
    mockDealer.Setup(d => d.GetCalculatedData(It.IsAny<string>())).Returns(mockData.Object);
    
    // Create the tested object (the DataProvider) using mocked dependencies.
    var dataProvider = new DataProvider<object, object, object, object>(
        requestComp: It.IsAny<IConverter<object, object>>(), 
        responseComp: It.IsAny<IConverter<object, object>>(), 
        dealer: mockDealer.Object,
        passcode: It.IsAny<string>()
    ); 
    
    // Act.
    dataProvider.Dispose();

    // Assert.
    // Verify that Dispose was called on the IData object.
    mockData.Verify(d => d.Dispose());
}

Here is some code that should explain each step of the test.

[TestMethod]
public void Test()
{
    // Arrange.
    var mockData = new Mock<IData>();
    var mockDealer = new Mock<IDealer>();

    // Setup mockDealer so that the GetCalculatedData returns the object from mockData.
    mockDealer.Setup(d => d.GetCalculatedData(It.IsAny<string>())).Returns(mockData.Object);
    
    // Create the tested object (the DataProvider) using mocked dependencies.
    var dataProvider = new DataProvider<object, object, object, object>(
        requestComp: It.IsAny<IConverter<object, object>>(), 
        responseComp: It.IsAny<IConverter<object, object>>(), 
        dealer: mockDealer.Object,
        passcode: It.IsAny<string>()
    ); 
    
    // Act.
    dataProvider.Dispose();

    // Assert.
    // Verify that Dispose was called on the IData object.
    mockData.Verify(d => d.Dispose());
}

§对你不离不弃 2025-02-06 15:47:31

@Batesian,@jereenmostert,@nkosi:感谢您的回答。

我根据自己的要求对代码进行了调整,并且奏效了。

[TestMethod]
public void Test()
{
// Arrange.
var mockData = new Mock<IData>();
var mockDealer = new Mock<IDealer>();
var reqComposeMock = new Mock<IConverter<object, object>>();
var resComposeMock = new Mock<IConverter<object, object>>();

// Setup mockDealer so that the GetCalculatedData returns the object from mockData.
mockDealer.Setup(d => d.GetCalculatedData(It.IsAny<string>())).Returns(mockData.Object);

// Create the tested object (the DataProvider) using mocked dependencies.
var dataProvider = new DataProvider<object, object, object, object>(
    requestComp: reqComposeMock.Object, 
    responseComp: resComposeMock.Object, 
    dealer: mockDealer.Object,
    passcode: "passcode"
); 

// Act.
dataProvider.Dispose();

// Assert.
// Verify that Dispose was called on the IData object.
mockData.Verify(d => d.Dispose());
}

@Batesian, @JeroenMostert, @Nkosi: Thanks for your answers.

I tweaked the code as per my requirement and it worked.

[TestMethod]
public void Test()
{
// Arrange.
var mockData = new Mock<IData>();
var mockDealer = new Mock<IDealer>();
var reqComposeMock = new Mock<IConverter<object, object>>();
var resComposeMock = new Mock<IConverter<object, object>>();

// Setup mockDealer so that the GetCalculatedData returns the object from mockData.
mockDealer.Setup(d => d.GetCalculatedData(It.IsAny<string>())).Returns(mockData.Object);

// Create the tested object (the DataProvider) using mocked dependencies.
var dataProvider = new DataProvider<object, object, object, object>(
    requestComp: reqComposeMock.Object, 
    responseComp: resComposeMock.Object, 
    dealer: mockDealer.Object,
    passcode: "passcode"
); 

// Act.
dataProvider.Dispose();

// Assert.
// Verify that Dispose was called on the IData object.
mockData.Verify(d => d.Dispose());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文