- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有 StartCommandHandler
它有责任创建一些带有所需文件的文件。但是为此,我必须给他一组子职责,例如:
"Art of the Unit testing"
.并开始添加单元测试。我关注了
SOLID
原则也是如此。特别是,
SRP
和
DIP
,在我看来,这是单元测试的先决条件。
if(!_dependency1.IsAnySomething())
{
_dependency2.Download();
var isScriptNeeded = _dependency2.IsScriptNeeded();
if(isScriptNeeded)
{
var res = _dependency3.ExecuteScript();
_dependency4.SetScriptResult(res.Info, res.Date, res.State);
}
_dependency3.Archive();
_dependency5.DeleteTemp();
}
DeleteTemp
下载后调用,或脚本是否执行,或脚本结果以正确的方式传递至SetScriptResult
方法。它是好的单元测试吗? 最佳答案
单元测试应该测试代码的行为,而不是代码的实现。
考虑单元测试如何增加值(value)是有帮助的:它们传达代码的预期行为,并验证预期行为是由实现生成的。它们在您的项目生命周期中增加了两次值(value):第一次是在最初实现代码时,第二次是在重构代码时。
但是,如果单元测试与特定实现密切相关,则在重构时单元测试无法增加值(value)。
它从来都不是一门完美的科学,但要知道你是在测试行为还是实现的一种方法是问“如果我重构,这个单元测试会中断吗?”如果重构会破坏测试,那么它就不是一个好的单元测试。
编写单元测试来简单地确保方法 A 被调用,然后是方法 B,然后是方法 C(或其他)通常是没有帮助的。这只是为了测试你的实现就是你的实现,它可能会阻碍而不是帮助下一个想要重构代码的开发人员。
相反,请考虑行为以及您的代码如何与其他对象交互。尝试将这些行为中的每一个梳理成单独的对象,并单独测试这些对象。
例如,您可能会将上述代码分解为三种不同的行为:
class Cache {
Cache(ValueStore store, ValueFactory factory) { ... }
object GetValue(object key) {
if (!store.HasValue(key))
factory.CreateValue(key);
return store.GetValue(key);
}
}
class CacheTest {
void GetValue_CallsFactory_WhenValueNotInStore() {
// arrange
var store = Mock.Of<VaueStore>(_ => _.HasValue() == false);
var factory = Mock.Of<ValueFactory>();
var cache = new Cache(store, factory);
// act
cache.getValue();
// assert
Mock.Get(factory).Verify(_ => _.CreateValue(), Times.Once());
}
}
关于java - 单元测试类的最佳实践,主要负责调用依赖项的方法,但也包含逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61848902/
我新发现了 Perl fork ,我非常喜欢。但有一件事让我担心——如果我只是左右分离进程,这肯定会在某个地方引起一些问题。是否应该使用一种合理的检查来确保我的小应用程序不会占用我机器的所有资源? 拿
谁负责 MVVM 中的异步数据获取?例如,我的 View 有 5 个不同的数据集合要获取,我希望按预定义的顺序异步检索这些数据。为此,我使用协程和任务。 问题:VM 是否对此负责,我的模型/存储库应该
我有什么 ember-cli POD 结构。我有嵌套的路由,因此有以下文件夹结构: | |_pods |_items |_index | |_
我有一个 C# WPF 应用程序,它从数据库中读取数据然后做一些工作。但问题是当我读取数据时,我的 UI 没有响应。我已经尝试过任务和调度程序。他们都没有帮助。下面的代码在 button_click
在使用 /sys/class/leds/ 摆弄 LED 之后,我现在正试图了解如何使用 linux kernel power supply attributes 控制计算机中的电池。 ,特别是 CHA
我在我的桌面应用程序中做了一些非常简单的错误记录,该应用程序通过 SerialPort 与设备通信。我做的一件事是设置一个全局异常捕获器,它除了使用以下方法记录堆栈跟踪外什么都不做: AppDomai
我是一名优秀的程序员,十分优秀!