我在
HasContentPermission
上创建了一个名为 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;
}
}
}
我这样称呼它:
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
的存根类,但这也不起作用。为什么?
或者我的处理方式是错误的吗?
确保您已经:
this
using myns;
请注意,您的示例中也有(我假设)一个拼写错误,因为该方法不在类中。
最后,我会避免将方法放入官方 .NET 命名空间中。这只会让追随您的人感到困惑,他们可能会认为该方法是官方支持的方法,而实际上它是您自己的方法并包含在您的项目中。
我怀疑这与您向现有的
System.Security.Principal
命名空间添加了扩展方法有关。确保引用定义扩展方法的项目,或尝试使用不同的命名空间。
扩展方法应该位于静态类中。你的静态类在哪里?你的代码能编译吗?
我能找到的有关 VB.NET 单元测试的文档非常少。我必须通过反复试验发现,默认情况下,VB.NET 中的扩展方法只能在当前程序集中工作。这是因为 VB.NET 中的静态类是一个模块,并且模块作用域默认为“Friend”(内部)。
如果您想在单元测试项目引用的项目中对扩展方法进行单元测试,请使用“公共模块”。