반응형
MOQ-인수 값 (다중 인수)을 기반으로 메서드 설정
다음과 같이 정의 된 인터페이스가 있습니다.
interface IMath
{
AddNumbersBetween(int lowerVal, int upperVal);
}
위의 기본 Moq를 다음과 같이 설정할 수 있습니다.
Mock<IMath> mock = new Mock<IMath>();
mock.Setup(m => m.AddNumbersBetween(It.IsAny<int>(), It.IsAny<int>()));
불러라
mock.Object.AddNumbersBetween(1,4);
그런 다음 호출되었는지 확인하십시오.
mock.Verify(m => m.AddNumbersBetween(1,4), Times.AtleastOnce());
UpperVal이 lowerVal보다 낮 으면 예외가 발생하도록 AddNumbersBetween 메서드를 설정하는 방법을 알아낼 수 없습니다.
mock.Object.AddNumbersBetween(4,1);//should throw an exception
기본적으로 다음과 같은 것을 찾고 있습니다.
mock.Setup(foo => foo.AddNumbersBetween("arg1 is higher than arg2")).Throws<ArgumentException>();
나는 이것이 일년 된 것을 알고 있지만 최소한 최신 버전의 Moq에서 여러 매개 변수를 사용하는 방법을 찾았습니다.
mock.Setup(x => x.Method(It.IsAny<int>(), It.IsAny<int>()))
.Returns<int, int>((a, b) => a < b);
단일 인수 메서드의 경우 가장 깨끗한 방법은 다음과 같습니다.
mock.Setup(foo => foo.Submit(IsLarge())).Throws<ArgumentException>();
...
public string IsLarge()
{
return Match<string>.Create(s => !String.IsNullOrEmpty(s) && s.Length > 100);
}
메서드에 여러 인수가있는 경우에는 적용 할 수 없습니다. 달성하고자하는 것을 모방하는 사용할 수있는 '해결 방법'이 여전히 있습니다.
/// <summary>
/// Tests if a moq can send an exception with argument checking
///</summary>
[TestMethod]
public void TestException()
{
Mock<IMath> mock = new Mock<IMath>();
mock.Setup(m => m.AddNumbersBetween(It.IsAny<int>(), It.IsAny<int>()));
mock.Setup(foo => foo.AddNumbersBetween(It.IsAny<int>(), It.IsAny<int>()))
.Callback<int, int>((i, j) => CheckArgs(i, j));
try
{
mock.Object.AddNumbersBetween(1, 2);
}
catch (Exception ex)
{
// Will not enter
Console.WriteLine("Exception raised: {0}", ex);
}
try
{
mock.Object.AddNumbersBetween(2, 1);
}
catch (Exception ex)
{
// Will enter here, exception raised
Console.WriteLine("Exception raised: {0}", ex);
}
}
private bool CheckArgs(int i, int j)
{
if( i > j)
throw new ArgumentException();
return true;
}
반응형
'programing' 카테고리의 다른 글
VB.NET에서 문자열 연결을위한 앰퍼샌드 대 플러스 (0) | 2021.01.18 |
---|---|
솔루션 탐색기 VS2010에서 부분 클래스 파일을 그룹화하는 방법 (0) | 2021.01.18 |
Class.forName을 사용하여 중첩 된 정적 클래스 인스턴스화 (0) | 2021.01.18 |
일반적으로 .gitignore를 통해 제외되는 Node.JS 관련 파일 및 폴더는 무엇입니까? (0) | 2021.01.18 |
파이썬 소스 코드를 여러 파일로 분할 하시겠습니까? (0) | 2021.01.18 |