2016-12-18 12 views
0

私はデバッグしていた作業コードを持っていましたが、メソッド内でいくつかのリファクタリングを行った後、私のユニットテストは404に戻り、理由を理解することができます。Webサービスが404コードを投げる

POSTメソッドからのコード

public class HomeController : ApiController 
{ 
    [HttpPost] 
    public string ReturnXmlDocument(HttpRequestMessage request) 
    { 
     try 
     { 
      XDocument doc = XDocument.Load(request.Content.ReadAsStreamAsync().Result); 
      Stream s = new MemoryStream(); 

      doc.Save(s); 
      s.Seek(0, SeekOrigin.Begin); 
      XmlSerializer mySerializer = new XmlSerializer(typeof(PictureModelList)); 
      using (XmlReader newReader = XmlReader.Create(s)) 
      { 
       PictureModelList obj = (PictureModelList)mySerializer.Deserialize(newReader); 
       string path = @"C:\testfolderforservice\"; 

       foreach (var item in obj.PictureList) 
       { 
        File.WriteAllBytes(string.Format("{0}{1}", path, item.FileName), item.Data); 
       } 
      } 

     } 
     catch (Exception ex) 
     { 

      ; 
     } 

     return "Success"; 
    } 

} 

ユニットテストからのコード

[TestMethod] 
    public void TestMethod1() 
    { 
     List<PictureModel> lPM = new List<PictureModel>(); 
     var files = Directory.GetFiles(@"C:\source", "*.jpg"); 

     foreach (var file in files) 
     { 
      PictureModel pm = new PictureModel(); 
      pm.FileName = Path.GetFileName(file); 
      pm.Data = File.ReadAllBytes(file); 
      lPM.Add(pm); 
     } 

     PictureModelList pmL = new PictureModelList(); 
     pmL.PictureList = lPM; 

     XmlSerializer serializer = new XmlSerializer(pmL.GetType()); 

     StringWriter sq = new StringWriter(); 
     serializer.Serialize(sq, pmL); 

     sq.Close(); 

     string xmlData = sq.ToString(); 

     var content = new StringContent(xmlData, Encoding.Unicode, "text/xml"); 

     var client = new HttpClient(); 

     var result = client.PostAsync("http://localhost/api/Home/ReturnXmlDocument", content).Result; 
    } 

、唯一のPOSTメソッドの内部でいくつかのリファクタリングを行なったし、PostAsync方法がで戻ってきたユニットテストを実行する前に私が言ったように404コード。

私はプロセスに接続することでPOSTメソッドをデバッグできましたが、多分私はすべて間違っています。

答えて

0

私は空のキャッチを取り除くことから始めます。あなたが持っている方法では、例外の後でも "成功"が返されます。空のキャッチブロックは決して良い考えではありません。

また、あなたがそれを待っていないので、ReadAsStringAsyncも疑問があります。読んだときに応答にまだ値が入っていない可能性があります。

どのようにテストが失敗していると判断していますか?私はその結果に対して何の主張も見ない。

有効なExceptionFiltersはありますか?

おそらく以前に働いていた "以前の"リファクタリングコードを投稿することで追加の手がかりが得られるかもしれません。

関連する問題