Bar*_*ens 1 c# unit-testing visual-studio-2012
我有这个创建的方法:
public static bool DeleteFile(FileInfo fileInfo)
{
try
{
fileInfo.Delete();
return true;
}
catch (Exception exception)
{
LogManager.LogError(exception);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我编写了以下单元测试:
[TestMethod]
public void DeleteFileSuccessFul()
{
string fileName = "c:\\Temp\\UnitTest3.txt";
FileInfo fileInfo = new FileInfo(fileName);
File.Create(Path.Combine(fileName));
bool success = FileActions.DeleteFile(fileInfo);
Assert.IsTrue(success);
}
Run Code Online (Sandbox Code Playgroud)
此测试失败,因为该文件正由另一个进程使用.测试失败了het bool success = FileActions.DeleteFile(fileInfo); 因为该文件正由另一个进程使用.
如何更改我的测试以使其有效?
您必须在Dispose方法FileStream返回的对象上调用方法File.Create以释放该文件的句柄:
[TestMethod]
public void DeleteFileSuccessFul()
{
string fileName = "c:\\Temp\\UnitTest3.txt";
FileInfo fileInfo = new FileInfo(fileName);
using (File.Create(Path.Combine(fileName)))
{
}
bool success = FileActions.DeleteFile(fileInfo);
Assert.IsTrue(success);
}
Run Code Online (Sandbox Code Playgroud)
UPDATE: using block提供了一种方便的语法,可确保在离开块的范围后即使发生异常也会调用对象的Dispose方法IDisposable.可以用try-finally块重写上面代码的等价物:
[TestMethod]
public void DeleteFileSuccessFul()
{
string fileName = "c:\\Temp\\UnitTest3.txt";
FileInfo fileInfo = new FileInfo(fileName);
FileStream fileStream = null;
try
{
fileStream = File.Create(Path.Combine(fileName));
}
finally
{
if (fileStream != null)
fileStream.Dispose();
}
bool success = FileActions.DeleteFile(fileInfo);
Assert.IsTrue(success);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6897 次 |
| 最近记录: |