相关疑难解决方法(0)

假装,嘲弄和捣蛋有什么区别?

我知道我如何使用这些术语,但我想知道是否有单独测试的伪造,模拟存根的可接受定义?你如何为你的测试定义这些?描述您可能使用每种情况的情况.

以下是我如何使用它们:

:一个实现接口但包含固定数据而没有逻辑的类.根据实施情况,简单地返回"好"或"坏"数据.

Mock:一个实现接口的类,允许动态设置值以返回/异常从特定方法抛出,并提供检查是否已调用/未调用特定方法的功能.

存根:类似于模拟类,但它不提供验证方法是否已被调用/未调用的能力.

模拟和存根可以由模拟框架手动生成或生成.伪造的类是手工生成的.我主要使用模拟来验证我的类和依赖类之间的交互.一旦我验证了交互并且正在通过我的代码测试备用路径,我就会使用存根.我主要使用假类来抽象出数据依赖性,或者每次使用模拟/存根都太繁琐.

unit-testing terminology mocking stub definition

650
推荐指数
11
解决办法
17万
查看次数

模拟任何给定类型参数的泛型方法调用

我有一个界面

public interface IDataProvider
{
    T GetDataDocument<T>(Guid document) where T:class, new()
}
Run Code Online (Sandbox Code Playgroud)

我想以某种方式模拟它,它只会返回给定类型的新实例,而不管确切的类型,如:

myMock.Setup(m => m.GetDataDocument<It.IsAny<Type>()>(It.IsAny<Guid>()))
.Returns(() => new T());
Run Code Online (Sandbox Code Playgroud)

(当然不起作用,因为我不能只给moq提供任何类型参数,我不知道必须返回哪种类型.

关于这个的任何想法?

c# moq

46
推荐指数
4
解决办法
3万
查看次数

在Moq中模拟泛型方法而不指定T.

我有一个方法的接口如下:

public interface IRepo
{
    IA<T> Reserve<T>();
}
Run Code Online (Sandbox Code Playgroud)

我想模拟包含此方法的类,而不必为它可用于的每种类型指定安装方法.理想情况下,我只是喜欢它返回一个new mock<T>.Object.

我该如何实现这一目标?

看来我的解释还不清楚.这是一个例子 - 当我指定T(这里是字符串)时,这是可能的:

[TestMethod]
public void ExampleTest()
{
    var mock = new Mock<IRepo>();
    mock.Setup(pa => pa.Reserve<string>()).Returns(new Mock<IA<string>>().Object);
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是这样的:

[TestMethod]
public void ExampleTest()
{
    var mock = new Mock<IRepo>();
    mock.Setup(pa => pa.Reserve<T>()).Returns(new Mock<IA<T>>().Object);
    // of course T doesn't exist here. But I would like to specify all types
    // without having to repeat the .Setup(...) line for each of them.
}
Run Code Online (Sandbox Code Playgroud)

被测对象的某些方法可能会调用三种或四种不同类型的保留.如果我必须设置所有类型,我必须为每个测试编写大量的设置代码.但是在单个测试中,我并不关心所有这些,我只需要非空的模拟对象,除了我实际测试的那个(我很乐意写一个更复杂的设置).

.net c# generics moq mocking

43
推荐指数
4
解决办法
4万
查看次数

标签 统计

c# ×2

mocking ×2

moq ×2

.net ×1

definition ×1

generics ×1

stub ×1

terminology ×1

unit-testing ×1