2017-01-27 7 views
6

örneğin birçok durumlarda test etmek için bu mümkündür:Tek bir yöntemde farklı durumlar ile Assert testi nasıl yazılır ve hepsi farklı yanıt durumlarıyla karşılaştığında geçer?

[TestCase(""), TestCase(null), TestCase("String"), TestCase("2010-07-14T00:00:00.000Z"), TestCase("201-07-14T00:00:00.000Z")] 

Ve ben hata nesnesine Serileştirilmemiş json ile API gelen yanıt alıyorum ben Tepki Vücut İleti ve HttpStatusCode API ve farklı doğrulamaları sonra doğru olduğunu varsayalım benim savumdan doğru olacaktır. Ben Json gelen jenerik tipine deserializing am

Yöntem: Burada

public TType GetResponseJsonAsObject<TType>(HttpResponseMessage content) 
     { 
       var contentResult = content.Content.ReadAsStringAsync().Result; 
       var specialCase = JsonConvert.DeserializeObject<TType>(contentResult); 
       return specialCase; 
     } 

benim test yöntemidir:

[TestCase(""), TestCase(null), TestCase("String"), TestCase("2010-07-14T00:00:00.000Z"), TestCase("201-07-14T00:00:00.000Z")] 
     public void PostAPI_SpecialCaseRequestDate_WithError_ProceedsSuccessfully(string date) 
     { 
      // arrange 
      SpecialCaseRequest data = new SpecialCaseRequest() 
      { 
       Name = "Test", 
       ExpirationDateTime = date, 
      }; 

      // act + assert 
      string json = JsonConvert.SerializeObject(data, Formatting.Indented); 
      PostMethods sendJsonDemo = new PostMethods(); 
      var response = sendJsonDemo.SendJsonDemo(json); 
      var responseBody = sendJsonDemo.GetResponseJsonAsObject<Error>(response); 
      Assert.IsNotNull(responseBody); 

      Assert.AreEqual("Date parameter cannot be empty string", responseBody.Message); 
      Assert.AreEqual("Date parameter cannot be empty null", responseBody.Message); 
     } 

Fikir bir yöntemde tüm durumlarda test ve başarıyla geçmek ancak Bu durumda ikinci Assert'de başarısız olur, çünkü API yanıt gövdesi iletisinden doğrulama yapıldıktan sonra bu dizede: "Tarih parametresi boş dizge olamaz" ve ilk olarak Assert iletilecek, ancak ikinci Assert başarısız olur, çünkü responseBody.Message API: "Tarih parametresi açılamıyor boş dizge ". Aynı sınama, null veya "String" ve etc, gibi, TestCase(null), çünkü ilk assert başarısız olacaktır çünkü api yanıt gövdesinden doğrulama sonra farklı string responseBody.Message = "Tarih parametresi boş olamaz" ile başarısız olur. Her TestCase için ayrı test yöntemleri oluşturmadan bu Asserts'i nasıl güzelce yönetebilirim?

+0

Bu, deneme modelinize bağlıdır. VisualStudio'nun NTest en azından 2013'e kadar parametreli testler yapamaz. NUint farklı olabilir. Çerçevelenmiş testlerle ilgili çerçeveniz için bilgileri kontrol etmeniz gerekecektir. –

+0

ExpirationDateTime özelliğini dize yerine bir DateTime olarak değiştirir misiniz? Veya ExpirationDateTime kurucusunda SpecialCaseRequest ve sonra göndermeden önce test edin? – msr

+0

@msr Evet, neden soruyorsunuz? – BinaryTie

cevap

2

Test için iki parametreyi geçebilirsiniz. Biri date ve ikincisi expectedError olabilir. Bu yolu TestCase ler gibi görünecektir:

[TestCase("", "Error1"), TestCase(null, "Error2"), TestCase("String", "Error3")] 
[TestCase("2010-07-14T00:00:00.000Z", "Error4")] 
[TestCase("201-07-14T00:00:00.000Z", "Error5")] 

Ve sadece tek bir Assert sahip olacaktır: NUnit 3.5.0 kullanıyor OP Sana bir göz atmalısınız düşünüyorum aydınlatılmasını takiben

Assert.AreEqual(expectedError, responseBody.Message); 
İlgili konular