我已经在我的ASP.NET核心应用程序中创建了一个简单的操作过滤器,这个操作过滤器应该记录用户的活动:
public class AuditAttribute : IResultFilter
{
private readonly IAuditService _audit;
private readonly IUnitOfWork _uow;
public AuditAttribute(IAuditService audit, IUnitOfWork uow)
{
_audit = audit;
_uow = uow;
}
public void OnResultExecuting(ResultExecutingContext context)
{
ar model = new Audit
{
UserName = context.HttpContext.User,
//...
};
_audit.Add(model);
_uow.SaveChanges();
}
public void OnResultExecuted(ResultExecutedContext context)
{
}
}
现在我只想知道如何为它编写单元测试。我用的是xUnit
和Mock
发布于 2019-04-09 10:24:24
我能够做到这一点的唯一方法是创建裸露的具体类,并测试HTTPContext结果以实现我想要实现的目标。因为我使用的是具体的类,所以不需要Mock
设置:
[SetUp]
public void SetUp()
{
_actionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext(),
RouteData = new RouteData(),
ActionDescriptor = new ActionDescriptor()
};
}
测试:
[Test]
public void Should_deny_request()
{
// Given
var resourceExecutingContext = new ResourceExecutingContext(_actionContext, new List<IFilterMetadata>(), new List<IValueProviderFactory>());
var attribute = new YourAttribute();
// When
attribute.OnResourceExecuting(resourceExecutingContext);
var result = (ContentResult) resourceExecutingContext.Result;
// Then
Assert.IsTrue(Equals("403", result.StatusCode.ToString()));
}
这对我来说很管用。
https://stackoverflow.com/questions/40949943
复制相似问题