我有一个单元测试,用于检查访问权限,并确保在构建类之前有足够的文件系统访问权限.但是,我认为我的单元测试违反了单元测试原则(FIRST),例如:隔离/独立和彻底,它们正在讨论构建独立单元测试并考虑故障情景的几个方面.我也相信,以实现方式进行的单元测试是单元测试.Net框架而不是我编写的代码的功能,因为底层类没有被模拟.但我也想知道你的意见,看看我是多么错误或正确.
单元测试说明:
单元测试试图确保构造函数EventFeedFile正在执行检查访问权限的方法.那种方法叫做VerifyWritable().请注意,这EventFeedFile是一个单独的类,并VerifyWritable()在另一个类中.
[Test]
public void DirectoryNotWritableTest()
{
var tempPath = Path.Combine(Path.GetTempPath(), "EventFileDirectoryWriteDeniedTest");
int pageSize = 10;
try
{
if (Directory.Exists(tempPath))
Directory.Delete(tempPath, true);
var directoryInfo = Directory.CreateDirectory(tempPath);
var securityRules = directoryInfo.GetAccessControl();
var writeDeniedRule =
new FileSystemAccessRule("Everyone", FileSystemRights.CreateFiles, AccessControlType.Deny);
securityRules.AddAccessRule(writeDeniedRule);
directoryInfo.SetAccessControl(securityRules);
// ReSharper disable once ObjectCreationAsStatement
Assert.Throws<UnauthorizedAccessException>(() => new EventFeedFile(new PersistenceDirectory(tempPath),
pageSize));
}
finally
{
if (Directory.Exists(tempPath))
Directory.Delete(tempPath, true);
}
}
/// <param name="directory">The directory containing the persistence file.</param>
/// <param name="pageSize">The size of event feed page.</param>
public EventFeedFile(PersistenceDirectory directory, int pageSize)
{
directory.EnsureExists();
directory.VerifyWritable();
mParentDirectory = directory.TargetPath;
mFullName = Path.Combine(mParentDirectory, Constants.FILE_NAME_EVENTPERSISTENCE);
mPageSize = pageSize;
}
public void VerifyWritable()
{
using (File.Create(
Path.Combine(TargetPath, Path.GetRandomFileName()),
1024,
FileOptions.DeleteOnClose))
{
}
}
Run Code Online (Sandbox Code Playgroud)
如你所说,你正在测试EventFeedFile
你也说VerifyWritable是在一个不同的模块.
然后,它是很明显VerifyWritable()应该被嘲笑到返回或抛出分别测试意图.
而不是做两件坏事:
VerifyWritable在您不想要时测试代码.
如果它有问题,你的测试将失败超出范围代码(或者更糟糕的是,将传递错误的代码).
你实际上是在编写文件,而且对于我认为不好的做法,访问规则会严重缩放,并且在切换FileSystems/OperatingSystems(或版本)时可能会发生变化
注意:测试实际上并不测试.NET Framework ...它只是利用Real Environment,而不是为Test使用创建Mocked(虚拟环境).
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |