więc mam test który krzaczy się z wiadomościa
Message: Moq.MockException : IHttpClientAdapter.SendAsync(Method: POST, RequestUri: 'https://here.someurl.nl/', Version: 1.1, Content: System.Net.Http.StringContent, Headers:
{
Authorization: Basic XXXXXXXXXXXXXX
Content-Type: application/json; charset=utf-8
}) invocation failed with mock behavior Strict.
All invocations on the mock must have a corresponding setup.
kod
private Mock<IHttpClientAdapter> mockHttpClientAdapter = new Mock<IHttpClientAdapter>(MockBehavior.Strict);
[Fact]
public async void AddDocumentToPackage_SendAsync_ShouldBeCalledWithExpectedValue()
{
// Arrange
var documentForPackage = Builder<DocumentForPackage>.CreateNew().Build();
var content = documentForPackage.JsonSerialize(jsonSerializerSettings);
var httpRequestMessage = BuildHttpRequestMessage(content, HttpMethod.Post);
mockHttpClientAdapter.Setup(x => x.SendAsync(httpRequestMessage));
var validSignContext = new ValidSignContext(mockHttpClientAdapter.Object);
// Act
var result = await validSignContext.AddDocumentToPackage("test", documentForPackage);
// Assert
mockHttpClientAdapter.Verify(x => x.SendAsync(httpRequestMessage), Times.Once);
}
private HttpRequestMessage BuildHttpRequestMessage(string content, HttpMethod httpMethod)
{
var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.Headers.Add("Authorization", "Basic XXXXXXXXXXXXXX==");
httpRequestMessage.Content = new StringContent(content, Encoding.UTF8, "application/json");
httpRequestMessage.Content.Headers.Add(@"Content-Length", content.Length.ToString());
httpRequestMessage.RequestUri = new Uri("https://https://here.someurl.nl/");
httpRequestMessage.Method = httpMethod;
return httpRequestMessage;
}
Interfejs do adaptera
public interface IHttpClientAdapter
{
Task<HttpResponseMessage> SendAsync(HttpRequestMessage request);
}
metode którą staram się przetestować
public async Task<DocumentForPackageResponse> AddDocumentToPackage(string packageId, DocumentForPackage documentForPackage)
{
var request = new HttpRequestMessage(HttpMethod.Post, new Uri(baseUrl + "packages/" + packageId + "/documents"));
request.Headers.Add(authorizationHeaderName, authorizationHeaderValue);
request.Content = new StringContent(documentForPackage.JsonSerialize(jsonSerializerSettings), Encoding.UTF8, "application/json");
var response = await httpClient.SendAsync(request);
return await response.Content.ReadAsAsync<DocumentForPackageResponse>();
}
jezeli usunę
httpRequestMessage.Content.Headers.Add(@"Content-Length", content.Length.ToString());
nie za bardzo pomaga, to juz jest kod który przeszedł z 4-5 modyfikacji (probówałem doprowadzić do działajacego rezultatu)
i problem mam z wiekszoscia funkcji w tej klasie, nawet jak zrobie setup gdzie jest It.IsAny<> a mock ma normalne zachowanie to pokazuje NPRE mimo, ze... nie powinno?
fasadinReturnsAsync(<<jakiś obiekt>>);
i to zrobilem, ale jak mam konkretny setup z konkretnymi parametrami, to ten setup jest jakos nieprawidlowy bo nie jest zmockowanyfasadinfasadin