xUnit 및 FsCheck를 사용하여 F #에서 작성된 테스트를 사용하여 C#에서 다이아몬드 카타를 수행하고 있으며 확인하려고 할 때 약간의 문제가 있습니다. 유저가 무효 인 입력 (임의의 발음 구별없이 알파벳 문자가 아닌 임의의 문자)의 경우에 예외가 Throw되는 경우 테스트중인FU에서 xUnit 및 FsCheck가있는 메소드로 예외가 던져 졌는지 확인하는 방법
방법을 : 다음은 코드가 지금과 같은 방법
public static string Make(char letter)
{
if (!Regex.IsMatch(letter.ToString(), @"[a-zA-Z]"))
{
throw new InvalidOperationException();
}
// code that makes the diamond
}
테스트 :
[<Property>]
let ``Diamond.Make must throw an InvalidOperationException if a character that isn't
an alphabet letter without any diacritics is given`` (letter : char) =
(not (('A' <= letter && letter <= 'Z') || ('a' <= letter && letter <= 'z'))) ==> lazy
(Assert.Throws<InvalidOperationException>(fun() -> Diamond.Make letter |> ignore))
내 접근 방식의 문제는 테스트가 예외가 슬로우되지 않는 것을 말한다이다, 하지만 테스트 스위트에 표시된 입력으로 애플리케이션을 실행할 때 예외가 발생합니다. 여기
는 테스트 스위트에 의해 주어진 메시지입니다 (I 의도적으로 테스트 이름 및 스택 추적을 생략 한) : 테스트 스위트는 값')'
에 대한 예외가 발생되지 않고 있다고하지만
Test Outcome: Failed
Test Duration: 0:00:00,066
Result Message:
FsCheck.Xunit.PropertyFailedException :
Falsifiable, after 1 test (0 shrinks) (StdGen (1154779780,296216747)):
Original:
')'
---- Assert.Throws() Failure
Expected: typeof(System.InvalidOperationException)
Actual: (No exception was thrown)
을, 내가 그랬어 수동 테스트와 예상 예외가 실제로 발생했습니다.
예외가 테스트에 의해 포착 된 것을 어떻게 확인할 수 있습니까?
받고있는 전체 테스트 실패 메시지를 게시하십시오. 또한 스크롤이 필요하지 않도록 코드를 포맷하십시오. –
FsCheck는 그 속성을 위조하기 쉽다고 생각합니다. 여기에 주어진 범위를 벗어나는 많은 'char'값이 있습니다. 'ü'와'ø'. 이들은 'Char.IsLetter'에 따른 편지입니다. –
지금 Char.IsLetter를 테스트하고 있다는 것을 알고 있습니까? –