Why is my Extension Method not showing up in my test class?

跟風遠走 提交于 2019-12-10 13:57:40

问题


I created an extension method called HasContentPermission on the System.Security.Principal.IIdentity:

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

And I call it like this:

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

Works like a charm. Now I want to unit test it. To do that, all I really need to do is call the extension method directly, so:

using System.Security.Principal;

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

But HasContentPermission won't intellisense. I tried creating a stub class that inherits from IIdentity, but that didn't work either. Why?

Or am I going about this the wrong way?


回答1:


Make sure you've:

  1. made the class static
  2. made the class accessible to the calling code
  3. included this before the type to extend
  4. built the project containing the extension
  5. added a reference to the project in your unit test project
  6. added a using mypackage; to any source file that uses the extension method if your extension method is contained inside a different package

Note that you've also got (I assume) a typo in your example in that the method isn't in a class.

Finally, I would avoid putting methods into the official .NET namespaces. It can only be confusing to anyone coming after you who might think that the method is an officially supported method when in reality it is your own and contained within your project.




回答2:


I suspect that it has something to do with the fact that you added an extension method to the existing System.Security.Principal namespace. Make sure that you reference the project that defines the extension method, or try it with a different namespace.




回答3:


The extension method should be in a static class. Where is your static class? Does your code compile?



来源:https://stackoverflow.com/questions/2525205/why-is-my-extension-method-not-showing-up-in-my-test-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!