Çok sayfalı/karışık iletileri bir POST olarak kabul edecek bir Web API uç noktası üzerinde çalışıyorum. Karşılaştığım konu, böyle bir talebi bir birim sınavında nasıl çözecek?Birim testinde mulitpart/mixed form isteği oluşturma
API yöntemi çekirdek:
public HttpResponseMessage Post(){
var parsedContent=Request.Content.ReadAsMultipartAsync().Result;
foreach(var item in parsedContent.Contents) {
switch(item.Headers.ContentType.MediaType){
case "application/json":
doSomething(item);
break;
case "text/plain":
doSomethingElse(item);
break;
case "application/pdf":
doAnotherThing(item);
break;
case "image/png":
doYetAnotherThing(item);
break;
}
}
//return status message based on results of previous calls...
}
ben istek nesnesini oluşturmak ve içine benim test koşulları tohum olduğunu biliyoruz ve kontrol zaman test yayını çağırmadan önce. Sıralamada sorun yaşıyorum, çok parçalı içeriği ReadAsMultipartAsync()
çağrısı için doğru biçime getirmenin doğru yolu.
Bu yöntemi birbirine ekledim ve oluşturduğu istek yukarıdaki denetleyiciye beslendiğinde doğru şekilde kabul edilir ve ayrıştırılır. Bununla birlikte, bir kırılma noktası belirlemek ve istek nesnesini incelemek, bu test tarafından oluşturulduğunda, kemancı gibi bir şey tarafından üretilen ve boru hattından gelenler tarafından çok farklı görünmektedir. Boru hattı System.Web.Http.WebHost.HttpControllerHandler.LazyStreamContent
türünde içeriğe sahipken, test hata ayıklaması System.Net.Http.MultipartContent
'dur.
public static HttpRequestMessage CreateMixedPostRequest(string url, IEnumerable<HttpContent> contentItems) {
var request=new HttpRequestMessage(HttpMethod.Post, url);
var content=new MultipartContent("mixed");
foreach(var item in contentItems) {
content.Add(item);
}
request.Content=content;
return request;
}
Ben bu hayata geçer olacak zaman testi boru hattı ile aynı formatta kontrolöre şeyler besleme olmadığı için bu teknik yanlış bir güvenlik duygusu yol açacaktır korkuyorum sanırım. Testlerimin isteklerini oluşturmanın daha iyi bir yolu var mı? Yoksa aşırı derecede paranoyak oluyorum ve bu benim senaryo için geçerli bir seçenek mi?
DÜZENLEME: Bu son noktayı harici koddan test etmeye çalıştığımız noktaya ulaştık ve LazyStream ve Multipart arasında önemli performans farkları görüyoruz. Dış kod, aynı verileri dahili testler olarak gönderirken genellikle zaman aşımlarını alır.