Я пытаюсь найти способ написать тест интеграции для компонента, который зависит от HttpContext и использует файлы cookie.Интеграционные тесты с зависимостями от куки ответов откликов System.NullReferenceException
Моя проблема - это исключение, когда оно пытается написать что-либо в файлы cookie ответов.
Вот несколько примеров, чтобы воспроизвести проблему.
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web;
using Moq;
namespace CookieTest
{
[TestClass]
public class CookieTest
{
private Mock<HttpContextBase> _httpContextMock;
[TestInitialize]
public void SetUp()
{
var request = new HttpRequest(null, "http://localhost/", "");
var stream = new MemoryStream();
var sw = new StreamWriter(stream);
var response = new HttpResponse(sw);
_httpContextMock = new Mock<HttpContextBase>();
_httpContextMock.Setup(t => t.Request).Returns(new HttpRequestWrapper(request));
_httpContextMock.Setup(t => t.Response).Returns(new HttpResponseWrapper(response));
}
[TestMethod]
public void TestCookieWrite()
{
var httpContext = _httpContextMock.Object;
var expectedValue = "value";
var cookies = httpContext.Response.Cookies;
var cookieToAdd = new HttpCookie("key", expectedValue);
// to illustrate that these are not null
Assert.IsNotNull(cookies);
Assert.IsNotNull(cookieToAdd);
// System.NullReferenceException: Object reference not set to an instance of an object.
// at System.Web.HttpCookieCollection.Add(HttpCookie cookie)
// at CookieTest.CookieTest.TestCookieWrite() in CookieTest.cs: line 41
cookies.Add(cookieToAdd);
Assert.AreEqual(expectedValue, httpContext.Response.Cookies.Get("key"));
}
}
}
Это полный трассировки стека? Кажется странным, поскольку метод '' Add' (http://referencesource.microsoft.com/#System.Web/HttpCookieCollection.cs,169) не похож на то, что он должен выбросить NRE самостоятельно ... –
Hi @JamesThorpe, да, это полная трассировка стека. Я немного озадачен. –
Я также посмотрел на источник .NET и не могу найти, где это происходит Неправильно –