2014-07-25 5 views
3

테스트 프로젝트의 odata 컨트롤러에서 다음 패치 메소드를 테스트해야합니다.패치 odata webapi 메소드 테스트하기

[ValidateModel] 
     [AcceptVerbs("PATCH", "MERGE")] 
     public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<User> patch) 
     { 
      var user = await db.Users.FindAsync(key); 
      if (user == null) 
      { 
       return NotFound(); 
      } 

      patch.Patch(user); 

      Validate(user); 

      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      try 
      { 
       db.Entry(user).Property(p => p.UserType).IsModified = false; 
       await db.SaveChangesAsync(); 
      } 
      catch (DbUpdateConcurrencyException) 
      { 
       if (!UserExists(key)) 
       { 
        return NotFound(); 
       } 
       throw; 
      } 

      return Updated(user); 
     } 

테스트 프로젝트의 코드는 다음과 같습니다. 누군가 델타 매개 변수에 값을 전달하는 방법을 말해 줄 수 있습니까? 현재 라인 컨트롤러에서 컴파일 오류가 발생합니다. 패치 (1, 사용자) ;.

[TestMethod] 
     public void TestPatch() 
     { 
      // Arrange 
      var controller = new UsersController(); 

      var user = new User(); 
      user.Id = 1; 
      user.Lastname = "Johanson"; 
      // Act 
      controller.Patch(1, <System.Web.OData.Delta> user); 

      // Assert 
     } 
+0

컴파일 오류 란 무엇입니까? – yenta

답변

4
var delta = new Delta<User>(typeof(User)); 
delta.TrySetPropertyValue("Id", 1); 
delta.TrySetPropertyValue("Lastname", "Johanson"); 

쉽게

+0

컨트롤러에 어떻게 넘겨 주시겠습니까? 패치 – user3751248

+0

controller.Patch (1, delta); – yenta

5

또한 동적 키워드를 사용하여 델타를 선언 할 수 있는지 확인하고 직접 속성을 설정할 수있는 도우미가 있다면 나도 몰라 :

dynamic delta = new Delta<User>(); 
delta.Id = 1; 
delta.Lastname = "Johanson"; 
3

@ yenta의 답변은 완벽하지만 괜찮 으면 nameof (C# 6.0 이후)을 사용하는 것이 좋습니다

var delta = new Delta<User>(typeof(User)); 
delta.TrySetPropertyValue(nameof(User.Id), 1); 
delta.TrySetPropertyValue(nameof(User.Lastname), "Johanson"); 
관련 문제