2017-09-07 3 views
0

저는 C# 초보자이며이 오류가 발생했습니다 Argument 1: Cannot convert from 'string' to 'System.Action'. 솔직히이 문제를 해결하는 방법을 모르겠습니다. 이 오류를 수정하려면 내 코드에 무엇을 추가해야하는지 알려주세요. 나는 기본적으로 코드가 올바르게 작동하는지 테스트 할 단위 테스트를 작성하고있다. (코드는 예외를 던지기로되어있다.)누군가가 C#에서이 오류를 수정하는 방법을 알려 줄 수 있습니까?

단위 테스트 프로젝트 파일 :

[TestMethod] 
    public void ExceptionTest() 
    { 
     var test = new JumpingCode(); 
     Assert.ThrowsException<ArgumentException>(test.EmptyValue(null)); 
    } 

클래스 파일 : 나는 기본적으로 무작위로 던져 테스트입니다

namespace Jumping 
{ 
    public class JumpingCode 
    { 
     public string EmptyValue(string some) 
     { 
      if (string.IsNullOrEmpty(some)) 
      { 
      throw new ArgumentException("Name Cannot be null or empty"); 
      } 

      return "Hello World"; 
     } 

    } 
} 

이 내 코드입니다. Unit Test 파일은 오류 메시지를 던집니다. 오류 메시지는이 줄에 있습니다. Assert.ThrowsException<ArgumentException>(test.EmptyValue(null))test.EmptyValue(null)은 밑줄이 그어진 텍스트입니다. 나는 정직하게 문제가 뭔지 전혀 모른다. 내가 잘못하고있는 것을 알고 있지만, 나는 무엇을 모르고 있습니다. 이것이 아무 것도 변하지 않을지 모르겠지만 전에는 예외에 대한 단위 테스트를 작성한 적이 없습니다.

답변

4

EmptyValue (string)의 결과를 Assert.ThrowsException으로 전달하지만이 방법에서는 Action의 유효성을 검사합니다.

당신이

Assert.ThrowsException<ArgumentException>(() => test.EmptyValue(null)); 
+0

귀하의 놀라운 대단히 감사합니다. 왜 지금 어떻게 작동하는지 설명해 주시겠습니까? –

+0

코드에서 'EmpyValue'의 반환 값을'Assert' 메서드에 전달합니다. 이것은'string'입니다. 그러나 Assert는이 람다 표현식이 생성하는 매개 변수로'Action' 델리게이트 (메소드 호출)가 필요합니다. 자세한 내용을 보려면 [여기] (https://msdn.microsoft.com/de-de/library/system.action (v = vs.110) .aspx) 및 [여기] (https://stackoverflow.com)를 클릭하십시오./questions/4934544/lambda-expression-vs-anonymous-methods). – jAC

+0

Assert.ThrowsException <...>은 '결과'를 반환하지 않는 '액션'대리인을 필요로합니다. 'EmptyValue'메소드는 문자열을 반환하기 때문에 '액션'과 호환되지 않습니다. 캡슐화를 통해 반환 형식을 무시하는 람다 식에서 메서드 호출을하면 실제로 Assert 메서드에 '동작'이 전달됩니다. –

0

Assert.Throws하여이

Assert.ThrowsException<ArgumentException>(test.EmptyValue(null)); 

을 변경해야 당신이 예외를 주장 할 수 있습니다 던져있어 예외를 반환

그래서 경우에 예외는 없다 던져 지거나 잘못된 유형의 예외가 발생하면 첫 번째 어설트가 어설 션에 실패합니다.

그러나 올바른 유형의 예외가 발생하면 이제 변수에 저장 한 실제 예외에 대해 주장 할 수 있습니다.

당신은 귀하의 경우 그래서이

var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null)); 

처럼 작성해야

var ext = Assert.ThrowsException<ArgumentException>(() =>test.EmptyValue(null)); 
+0

대단히 감사합니다. –

+0

도와 주신다고 믿는다면 제 대답이나 upvote 또는 모두를 수락하십시오. – napi15

관련 문제