我正在使用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)