小编Mat*_*ole的帖子

单元测试模拟框架是否会影响您编程的方式?

我正在使用Moq框架进行单元测试.

我有一个描述类的接口,如下所示:

public interface ISourceFileLocation : IFileLocation, IDisposable
{
    bool RemoveAfterTransfer { get; set; }
    void RemoveSource();
    //.....
}
Run Code Online (Sandbox Code Playgroud)

为了确保调用RemoveSource-Method,我实现了一个基类,其中在dispose方法中调用remove.

public abstract class SourceFileBase : ISourceFileLocation
{
    //......

    public bool RemoveAfterTransfer { get; set; }

    public void RemoveSource()
    {
        if (File.Exists(Uri.AbsolutePath))
        {
            File.Delete(Uri.AbsolutePath);
        }
    }

    public void Dispose()
    {
        if (this.RemoveAfterTransfer)
            this.RemoveSource();
    }
}
Run Code Online (Sandbox Code Playgroud)

模拟ISourceFileLocation时没有默认实现,因此对于测试我想在具体类应该继承的基类上实现测试.

在模拟基类时,我的测试期望RemoveSource-Method是虚拟的,这打破了我确保调用方法的想法!

这是缺乏框架,有更好的框架或方法来测试这个,或者这是我的代码的问题,我应该重新考虑我的设计?

亲切的问候.

测试方法:

    [TestCategory("Source")]
    [TestMethod]
    public void CheckIfRemoveSourceMethodIsCalled()
    {
            //ARRANGE
            var mockSourceLocation = new Mock<SourceFileBase>();
            mockSourceLocation.Object.RemoveAfterTransfer = true;
            mockSourceLocation.Setup(x => x.RemoveSource());
            //ACT
            mockSourceLocation.Object.Dispose();
            /ASSERT …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq

3
推荐指数
1
解决办法
117
查看次数

标签 统计

c# ×1

moq ×1

unit-testing ×1