c# - 为什么我的扩展方法没有出现在我的测试类中?

标签 c# unit-testing extension-methods

我在 System.Security.Principal.IIdentity 上创建了一个名为 HasContentPermission 的扩展方法:

namespace System.Security.Principal
{
    public static class IdentityExtensions
    {
        public static bool HasContentPermission
            (this IIdentity identity, int contentID)
        {
            // I do stuff here
            return result;
        }
    }
}

我这样调用它:

bool hasPermission = User.Identity.HasPermission(contentID);

像魅力一样工作。现在我想对其进行单元测试。为此,我真正需要做的就是直接调用扩展方法,因此:

using System.Security.Principal;

namespace MyUnitTests
{
    [TestMethod]
    public void HasContentPermission_PermissionRecordExists_ReturnsTrue()
    {
        IIdentity identity;
        bool result = identity.HasContentPermission(...

但是 HasContentPermission 不会智能感知。我尝试创建一个继承自 IIdentity 的 stub 类,但这也不起作用。为什么?

还是我做错了?

最佳答案

确保您:

  1. 使类静态化
  2. 使调用代码可以访问该类
  3. 在要扩展的类型之前包含this
  4. 构建包含扩展的项目
  5. 在您的单元测试项目中添加对项目的引用
  6. 添加 using mypackage; 到任何使用扩展方法的源文件,如果您的扩展方法包含在不同的包中

请注意,您的示例中也有(我假设)拼写错误,因为该方法不在类中。

最后,我会避免将方法放入官方 .NET 命名空间中。这只会让追随您的人感到困惑,他们可能认为该方法是官方支持的方法,而实际上它是您自己的并包含在您的项目中。

关于c# - 为什么我的扩展方法没有出现在我的测试类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525205/

相关文章:

c# - 为什么 SByte 和 Int32 CompareTo() 方法的行为不同?

c# - 将网格数据导出到 excel。保存前先打开excel文件

unit-testing - 测试 Node.js,模拟并测试所需的模块?

jquery - 如何模拟 jQuery 插件?

javascript - QUnit 中有 spyOn 类似物吗?

android - 如何在 Kotlin 中为 Any 类型声明扩展 val

c# - 我的第一个扩展方法,它能写得更好吗?

c# - 如何从 View 模型将 Func<T,T,T> 绑定(bind)到 XAML 中的依赖属性?

javascript - 用户 Web 控件处理 OnClientClick 事件

c# - 测试未观察到的异常