小编Bla*_*iar的帖子

将Moqs It.IsAny <string>作为方法参数传递

首先,有关我的开发环境的一些信息:

  • .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>() ) );
//...
}
Run Code Online (Sandbox Code Playgroud)

但是现在我想调用一个进行设置的功能,因此我不必复制粘贴上面的代码并使我的单元测试稍微“好看”。我想象这样的事情:

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 ) );     
}
Run Code Online (Sandbox Code Playgroud)

有人知道解决方案吗?我当我使用string甚至var为未知类型的变量anyString保持的值null之后UnknownType anyString …

c# moq

5
推荐指数
1
解决办法
244
查看次数

仅传递字符串数组时,为什么编译器会因为非常量表达式而报错

当我将字符串数组传递给这样的测试函数时:

[TestCase( new string[] { "1", "2", "3" }, 1 )]
[TestCase( new string[] { "54", "508" }, 1 )]
[TestCase( new string[] { "768" }, 2 )]
public void someTest( string[] someStrings, int someNumber ) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

编译工作正常。

但是,如果我删除整数参数,如以下代码片段所示:

[TestCase( new string[] { "1", "2", "3" } )]
[TestCase( new string[] { "54", "508" } )]
[TestCase( new string[] { "768" } )]
public void someTest( string[] someStrings ) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

出现消息的编译器错误An attribute argument must be …

c# nunit visual-studio-2013

5
推荐指数
1
解决办法
246
查看次数

标签 统计

c# ×2

moq ×1

nunit ×1

visual-studio-2013 ×1