gpt4 book ai didi

.net - 在 Visual Studio 中以部分信任的方式运行 MSTest

转载 作者:行者123 更新时间:2023-12-01 04:14:05 32 4
gpt4 key购买 nike

我喜欢能够以部分信任的方式运行 MSTest。这将允许我配置我的单元测试调用的代码可以做什么和不能做什么。

我试图解决的问题是当使用文件系统、数据库、系统时钟和其他外部资源时,让我的自动化(单元)测试失败。通过在部分信任下运行,我可以配置 AppDomain 可以执行和不可以执行的操作类型。这使我能够检测代码中没有正确抽象出所用资源的地方。

如果有其他方法可以实现这一点,请告诉我。

最佳答案

不幸的是,MSTest 没有为此提供内置机制,并且 .NET 4.0 中 CAS 策略应用程序的更改严重限制了支持的方法。

最简单的方法是限制 MSTest 创建的 AppDomain 上的 CAS 权限授予,以在特定测试程序集中运行测试。但是,当前版本的 MSTest 不允许拦截和/或自定义 AppDomain 创建。我们无法通过向 AssemblyInitialize 方法添加代码来解决此问题,因为在 AppDomain 中开始运行代码后所做的 AppDomain 策略更改无效。

这基本上给我们留下了一个单一的支持机制来应用 CAS 权限限制进行测试:从测试方法或调用测试方法的代码中应用 PermissionSet.PermitOnly。例如。:

[TestMethod]
public void SomeTest()
{
SomeStaticTestUtilityClass.TargetPermissionSet.PermitOnly();

// Run the rest of your test code here.
}

可以使用 http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-1.aspx 中描述的方法通过自定义测试属性来完成此操作。 .但是,我尚未对此进行测试,并且我不确定测试方法调用机制是否允许以导致它出现在测试代码的调用堆栈中的方式应用 PermitOnly。

如果您有很多这些要编写并且使用自定义 ITestMethodInvoker 要么不起作用要么不适合,另一个选择是使用像 PostSharp 这样的后编译器。插入 PermitOnly 调用。

如果这些都不适合,并且您没有使用 MSTest,您可能还需要考虑将您的测试框架更改为更易于扩展的框架。

关于.net - 在 Visual Studio 中以部分信任的方式运行 MSTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671706/

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