【发布时间】:2018-10-26 07:31:46
【问题描述】:
首先是关于我的开发环境的一些信息:
- .Net Framework 4.5
- 起订量 4.10
- Autofac 4.2
- NUnit 3.11
我尝试模拟一个接受一些字符串参数的函数,我想使用It.IsAny<string>() 进行设置。通常我会这样:
using ( AutoMock mock = AutoMock.GetLoose() ) {
mock.Mock<SomeInterface>()
.Setup( x => x.someFunction(
It.IsAny<string>(),
It.IsAny<string>(),
It.IsAny<string>() ) );
//...
}
但是现在我想调用一个进行设置的函数,所以我不必复制粘贴上面的代码并使我的单元测试有点“更好看”。我想像这样:
using ( AutoMock mock = AutoMock.GetLoose() ) {
UnknownType anyString = It.IsAny<string>();
setup( mock, anyString );
//...
}
void setup( Automock mock, UnknownType anyString ){
mock.Mock<SomeInterface>()
.Setup( x => x.someFunction( anyString, anyString, anyString ) );
}
有人知道解决方案吗?当我使用string 甚至var 作为未知类型时,变量anyString 在UnknownType anyString = It.IsAny<string>(); 之后保持值null。提前感谢您的回答。
进一步说明:
我需要为每个参数指定不同的值。所以它可能看起来像这样:
using ( AutoMock mock = AutoMock.GetLoose() ) {
UnknownType string1 = It.IsAny<string>;
UnknownType string2 = It.Is<string>( s => s.Equals( "Specific string" ) );
UnknownType string3 = It.IsAny<string>;
setup( mock, string1, string2, string3 );
//...
}
private static void setup( AutoMock mock,
UnknownType string1, UnknownType string2, UnknownType string3 ) {
mock.Mock<SomeInterface>().Setup( x => x.someFunction( string1, string2, string3 ) );
}
【问题讨论】:
-
我们在stackoverflow.com/questions/15372226/moq-it-is-not-matching/… 也有类似的问题 - 只要确保
UnknownType是Expression<>。