我想模拟System.IO.FileInfo.Extension方法并让它返回".xls“,但是我什么都不能做
这个例子对删除很有用,但对扩展不起作用(代码不会编译)
[ClassInitialize]
public static void Initialize(TestContext context)
{
Mock.Partial<FileInfo>().For((x) => x.Extension);
}我也尝试过使用这个示例,但是代码是错误的。
编辑:我知道我可以通过这种方式设置一个接口并进行测试,但是付费版本JustMock应该模拟具体的类。既然我付了钱,我想知道该怎么做。
发布于 2012-07-17 17:16:34
最新发布的JustMock (Q2,2012年)。您不再需要MockClassAtriibute来模拟MsCrolib成员。
您可以通过以下方式编写上面的测试:
[TestClass]
public class UnitTest1
{
[ClassInitialize]
public static void Init(TestContext context)
{
Mock.Replace<FileInfo, string>(x=> x.Extension).In<UnitTest1>();
}
[TestMethod]
public void ShouldAssertFileInfoExtension()
{
var fileInfo = Mock.Create<FileInfo>(Constructor.Mocked);
string expected = "test";
Mock.Arrange(() => fileInfo.Extension).Returns(expected);
Assert.AreEqual(fileInfo.Extension, expected);
}
}发布于 2012-04-16 15:55:24
在我看来,您只需要将依赖关系抽象到另一个包装类中,那么就很容易模拟了。
public class FileInfoAbstraction
{
protected FileInfo _fileInfo = null;
public virtual string Extension
{
get { return _fileInfo.Extension; }
}
public FileInfoAbstraction(string path)
{
_fileInfo = new FileInfo(path);
}
}然后,无论您在何处使用FileInfo类,插入您的抽象:
var myFileInfo = new FileInfoAbstraction(somePath);因为扩展现在被标记为虚拟的,所以大多数模拟框架将能够修改它。
发布于 2012-04-18 13:02:38
我想我错过了一个属性
[TestClass, MockClass] // **MockClass Added**
public class UnitTest1
{
[ClassInitialize]
public static void Init(TestContext context)
{
Mock.Partial<FileInfo>().For<FileInfo, string>(x => x.Extension);
}
[TestMethod]
public void ShouldAssertFileInfoExtension()
{
var fileInfo = Mock.Create<FileInfo>(Constructor.Mocked);
string expected = "test";
Mock.Arrange(() => fileInfo.Extension).Returns(expected);
Assert.AreEqual(fileInfo.Extension, expected);
}
}https://stackoverflow.com/questions/10177363
复制相似问题