gpt4 book ai didi

c# - 单元测试 : where to stop?

转载 作者:行者123 更新时间:2023-11-30 17:42:27 25 4
gpt4 key购买 nike

如果您在要测试的类中有依赖项的具体实现,那么经典的解决方案是:添加一个您可以完全控制的间接层。

因此需要添加越来越多的间接层(在单元测试中可以是 stub /模拟的接口(interface))。

但是:在我的测试中的某个地方,我必须有我的依赖项的“真实”实现。那么这个呢?测试?不测试?

举个例子:

我对我的应用程序中需要的路径有一些依赖性。所以我提取了一个接口(interface),IPathProvider(我可以在测试中伪造)。这是实现:

public interface IPathProvider
{
string AppInstallationFolder { get; }
string SystemCommonApplicationDataFolder { get; }
}

PathProvider的具体实现是这样的:

public class PathProvider : IPathProvider
{
private string _appInstallationFolder;
private string _systemCommonApplicationDataFolder;

public string AppInstallationFolder
{
get
{
if (_appInstallationFolder == null)
{
try
{
_appInstallationFolder =
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
}
catch (Exception ex)
{
throw new MyException("Error reading Application-Installation-Path.", ex);
}
}
return _appInstallationFolder;
}
}

public string SystemCommonApplicationDataFolder
{
get
{
if (_systemCommonApplicationDataFolder == null)
{
try
{
_systemCommonApplicationDataFolder =
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
}
catch (Exception ex)
{
throw new MyException("Error reading System Common Application Data Path.", ex);
}
}
return _systemCommonApplicationDataFolder;
}
}
}

您是否测试此类代码,如果测试,如何测试?

最佳答案

PathProvider 类看起来很像数据库存储库类 - 它与外部系统(例如,文件系统、数据库等)集成。

这些类存在于您系统的边界——其他类依赖于它们,并且它们仅依赖于外部系统。它们将您的系统连接到外部世界。

因此,他们受制于 integration testing - 不是单元测试。

我通常只是标记我的测试(例如使用 xUnit 的 Trait 属性)以将它们与常规测试分开,因此我可以在隔离运行时禁用它们(例如没有数据库)。另一种方法是将它们分离到同一个解决方案中的一个全新项目中,但我个人认为这太过分了。

[Fact, Trait("Category", "Integration")]
public void ReturnsCorrectAppInstallationFolder()
{
// Arrange
var assemblyFilename = Path.GetFilename(typeof(SomeType).Assembly.Location);
var provider = new PathProvider();

// Act
var location = provider.AppInstallationFolder;

// Assert
Assert.NotEmpty(Directory.GetFiles(location, assemblyFilename))
}

关于c# - 单元测试 : where to stop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31986526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com