相关疑难解决方法(0)

假对象与模拟对象

在TDD中有两个概念:虚假对象和模拟对象.如果要测试的类与其他类或对象或数据库交互,则使用这两个概念...

我的问题是:两者有什么区别?我什么时候可以使用它们中的每一个?

编辑: 我找到了这个答案: 假装,嘲弄和剔除有什么区别?

但是我仍然对这两者之间的区别感到困惑:他们都创建了组件的实现,并为Fake实现了轻量级.但是,如果是假的话,"快捷方式"的"轻量级实施"是什么意思?Mock对象的工作方式与真实对象的工作方式有何区别?

tdd unit-testing

6
推荐指数
1
解决办法
4043
查看次数

google mock - 我可以在同一个模拟对象上多次调用EXPECT_CALL吗?

如果我EXPECT_CALL在同一个模拟对象上调用两次TEST_F...怎么了?

期望是附加到模拟对象还是第二次调用会消除第一次调用的效果?

我发现After After Clause似乎暗示允许多次调用同一个mock + EXPECT_CALL.

unit-testing googletest googlemock

6
推荐指数
3
解决办法
7468
查看次数

接口上的最小起订量通用方法设置

如何使用 C# 中的 moq 库设置通用方法?如

Interface IA
{
    void foo();
    void Get<T>();
}

[Fact]
public void SetupGenericMethod()
{
    var mock = new Mock<IA>();
    mock.Setup(x=> x.Get<It.IsAny<???>()>()
}
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq

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

如何对依赖Asio的一段代码进行单元测试?

我有一个包含 Asio 的类。它的目的是模拟域和 TCP 套接字上的通信,但我对自动化单元测试感到困惑。我查看了FakeIt,但它只测试虚拟方法,GoogleMocks建议对我的代码进行模板化,以便我可以通过单元测试的 MockAsio 实现和生产中的真实 Asio。

还有其他方法对网络代码进行单元测试吗?伪造域和 TCP 套接字而不是运行整个堆栈?如果我使用 GoogleMock,为什么要使用一个使用 GoogleMock 的类而不是我自己的实现来满足我的需要?

c++ sockets unit-testing network-programming boost-asio

4
推荐指数
1
解决办法
3227
查看次数

NUnit测试应用程序,而不是环境或数据库

我想更好地使用NUnit来测试我编写的应用程序,但我经常发现我编写的单元测试有一个直接链接到开发机器上的环境或底层数据库.

让我举个例子.

我正在编写一个单独负责重写字符串的类,该字符串已由另一个应用程序存储在注册表中.密钥存储在HKCU\Software\CustomApplication\IniPath中.

我最终写的测试看起来像这样;

[Test]
public void GetIniDir()
{
    RegistryReader r = new RegistryReader();
    Assert.AreEqual(@"C:\Programfiles\CustomApplication\SomeDir", r.IniDir);
}
Run Code Online (Sandbox Code Playgroud)

但问题是字符串@"C:\ Programfiles\CustomApplication\SomeDir"现在真的是正确的.明天它可能已经改为@"C:\ Anotherdir\SomeDir",突然间,即使代码没有改变,也会破坏我的单元测试.

当我创建一个对数据库执行CRUD操作的类时,也会出现此问题.数据库中的数据可以随时更改,这反过来会使测试失败.因此,即使我的类完成了预期的操作,它也会失败,因为数据库会返回我最初编写测试时所拥有的更多客户.

[Test]
public void GetAllCustomersCount()
{
    DAL d = new DAL();
    Assert.AreEqual(249, d.GetCustomerCount());
}
Run Code Online (Sandbox Code Playgroud)

你们有没有关于编写不依赖周围环境的测试的技巧?

c# nunit unit-testing

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