在我的Owin Middleware中,我订阅了对OnSendingHeaders的回调。在我的UnitTests中,回调是有时被调用两次。大多数情况下,第一个TestCase成功,第二个失败。有时两者都成功,有时两者都失败了我在制作中也遇到了这个问题。
据我所知documentation,这个Callback只能被调用一次。我是否误解了文档?或者这是一个错误?是否有一种“干净”的方式来处理这种行为?
public class MyMiddleware
{
public void Initialize(Func<IDictionary<string, object>, Task> next) { }
public int Count { get; private set; }
public async Task Invoke(IDictionary<string, object> env)
{
IOwinContext context = new OwinContext(env);
context.Response.OnSendingHeaders(dummy =>
{
Count++;
}, null);
await context.Response.WriteAsync("something");
}
}
[TestFixture]
public class MyMiddlewareTests
{
[TestCase(1), TestCase(2)]
public async Task TheTest(int dummy)
{
var myMiddleware = new MyMiddleware();
using (var server = TestServer.Create(app => { app.Use(myMiddleware); }))
{
var response = await server.HttpClient.GetAsync("/");
Assert.AreEqual(1, myMiddleware.Count);
}
}
}
编辑:在最初的问题中,我说我没有看到生产中出现的问题。这改变了,所以问题不仅仅是测试。
编辑2:我们意识到我们在生产上遇到了不同的问题,即我只能确认使用testserver调用了两次回调。