Unity(纯C语言单元测试框架!不是那个Unity3d)入门文档

2023-11-19

译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条。此为Unity手册的翻译,仅供学习交流使用,请勿用于商业用途。
翻译的资料是公开的,在docs/UnityGettingStartedGuide.md,我想应该不会有什么版权问题,如涉及版权问题,请联系我删除文章。

Unity - 入门

欢迎

恭喜。你现在是你那堆bit的光荣的主人了!你准备对你的那些1和0做些什么呢?这篇文档
应该能够帮助你决定这些。

Unity是一个单元测试框架。目标是精简而强大。Unity测试框架的内核是三个文件:单个C
文件和两个头文件。它们相互合作提供许多函数和宏以使得测试更顺滑。

Unity的设计是跨平台的。它尽可能地遵从C标准,同时提供对许多不守规矩的嵌入式C编译器
的支持。Unity已被用在许多编译器上,包括GCC、IAR、Clang、Green Hills、 Microchip和
MS Visual Studio。将其移植到一个新目标上不需要太多工作量。

文档综述

Unity 断言参考文档

这篇文档将带你看遍Unity提供的所有断言选项。这是你单元测试的面包黄油。你将在断言上
花费比Unity其他部分更多的时间。

Unity 断言欺骗表

这篇文档是之前那个文档中各种断言的一个删减的总结表。特别适合打印出来以备参考。

Unity 配置向导

当你打算在一个新目标或编译器上使用Unity时,这篇文档是你要参考的。它会将你看遍配置
选项,帮助你定制你自己的测试环境以满足你的需求。

Unity Helper 脚本

这盘文档描述了helper脚本,helper脚本有助于简化你的测试工作流。它描述了在你的Unity
安装路径下auto文件夹内的那些可用的Ruby脚本。使用Unity并不需要用到Ruby以及这些脚本。
它们只是给想用的人提供一些便利而已。

Unity License

开源项目难道能没有license文件?这篇简短的文档描述了在你使用这个软件时应该同意的条
款。基本上,我们希望不管你想在什么上下文中使用它,它都能对你很有帮助,但是如果你
遇到了问题,请不要责备我们。

文件夹综述

如果你是从Github或其他类似的地方获取Unity的,你很可能被眼前的一堆吓了一跳。
别担心,Unity本身十分的小。其他部分之所以在这只是为了让你的生活过的更好些。
你可以忽视它们或使用它们,全凭你自己做主。这里是工程中所有东西的综述。

  • src - 这是你关心的代码!这个文件夹包含一个C文件以及两个头文件。这三个文件 Unity。
  • docs - 你正在读这个文档,所以可能你是自己进到这个文件夹中的。这里放着所有的文档。
  • examples - 这里包含一些使用Unity的示例。
  • extras - 这些是可选的Unity插件,它们不是内核工程的一部分。如果你是通过James Grenning的
    书找到我们的,你会想看看这里。
  • test - 这里是Unity和它的所有脚本被测试的地方。如果你只是在用Unity,很可能你永远不需要
    看这个文件夹。如果你是团队中负责把Unity移植到新工具链的中奖者,这里可以帮助你验证所有东西
    都被合理地配置了。
  • auto - 在这里你将发现一些有用的Ruby脚本,它们可以简化你的测试工作。他们完全只是可选的,
    不用它们照样可以使用Unity。

怎么创建一个测试文件

测试文件都是C文件。大部分情况下,你将为每个你想要测试的C模块创建一个测试文件。
测试文件应该include unity.h以及你要测试的C模块的头文件。

下一步,一个测试文件将包含一个setUp()以及tearDown()函数。setUp函数可以包含任何你
想要在每个测试之前运行的东西。tearDown函数可以包含任何你想要在每个测试之后运行的东西。
两个函数都不接受任何参数,也不返回东西。如果你在使用一个将这些函数配置为可选的编译器,
你也许可以不实现他们。不确定?试一试不就知道了。如果你的编译器抱怨说它在链接时找不到
setUp或tearDown,那你就知道你起码需要为它们创建一个空的函数了。

文件的主体将会是一系列的测试函数。测试函数遵从以下命名约定,以"test_"或"spec_"为开头。
不是必须按照这种方式命名它们,但是这样会使得其他开发者更容易看出哪些函数是测试。同样的,
Unity或Ceedling自带的自动化脚本将默认通过这种前缀的方式来寻找测试函数。测试函数都不接受
任何参数,也不返回东西。所有的测试计数是由Unity内部处理的。

最终,在你的测试文件的最底下,你将写一个main()函数。这个函数将调用UNITY_BEGIN()
然后为每个测试调用RUN_TEST,然后最终是UNITY_END()。这是实际上触发每个测试函数运行
的地方,所以重要的是,每个函数都要有它自己的RUN_TEST

把每个测试加进main函数的过程真是很无聊。如果你喜欢在构建过程中使用helper脚本,你可以
考虑用我们特有用的generate_test_runner.rb脚本。它会为你创建main函数以及所有的调用,
前提是你遵从建议的命名约定。这种情况下,你根本不需要将main函数包含进你的测试文件中。

当你完成上述步骤,你的测试文件应该看起来像这样:

#include "unity.h"
#include "file_to_test.h"

void setUp(void) {
    // 在这里配置东西
}

void tearDown(void) {
    // 在这里清理东西
}

void test_function_should_doBlahAndBlah(void) {
    //测试
}

void test_function_should_doAlsoDoBlah(void) {
    //更多测试
}

int main(void) {
    UNITY_BEGIN();
    RUN_TEST(test_function_should_doBlahAndBlah);
    RUN_TEST(test_function_should_doAlsoDoBlah);
    return UNITY_END();
}

最终,可能你需要更多的定制。这种情况下,你会想看看配置指南。尽管,这应该足够让你
行动了。

怎么构建和运行一个测试文件

单个最大的挑战是提取出一个新的单元测试框架,至少在像C或C++这样的语言中。这些语言
很擅长于让你"接近金属(注:貌似是接近本质的俚语)"(为什么这个句子中要用金属?说
"接近硅"不应该更加准确么?)。尽管这个特性通常是个好事情,但它会使得测试更具挑战。

你在工具链上有两个真的很好的选择。取决于你的学识,可能你会惊讶这两个选择都没在你
的硬件上运行单元测试。
这有许多原因,但这里是一个短的版本:

  • 在硬件上,你有太多的约束(如处理能力、内存),
  • 在硬件上,你无法完全控制所有的寄存器
  • 在硬件上,单元测试更加有挑战
  • 单元测试不是系统测试。要区分开他们。

大部分开发者选择将单元测试作为本地应用程序(比如使用gcc或MSVC)或运行在模拟器上的应用程
序来开发,而不是在你的真正硬件上运行单元测试。这两个都是好选择。本地应用的优势是配置
起来更加快和简单。模拟器应用程序的优势是使用的是与你目标硬件相同的编译器。配置这两的
选项在配置指南中有探讨。

为了使任一选择工作,你也许需要对包含你寄存器集的文件做一些修改(之后会讨论)。

在两种情况下,一个测试的构建都要链接unity、测试文件以及被测试的C文件。这些文件创建了
一个可执行文件,这可执行文件可以当做那个模块的测试集来运行。然后,这个过程照搬到下一个
测试文件。拆分测试到独立的可执行文件的灵活性使得我们能更全面的对我们的系统进行单元测试
,并且所有测试代码都不在我们最终的产品代码中。

Find The Latest of This And More at ThrowTheSwitch.org


以下是中英对照版


Unity - Getting Started

Welcome

Congratulations. You’re now the proud owner of your very own pile of bits! What
are you going to do with all these ones and zeros? This document should be able
to help you decide just that.
恭喜。你现在是你那堆bit的光荣的主人了!你准备对你的那些1和0做些什么呢?这篇文档
应该能够帮助你决定这些。

Unity is a unit test framework. The goal has been to keep it small and
functional. The core Unity test framework is three files: a single C file and a
couple header files. These team up to provide functions and macros to make
testing easier.
Unity是一个单元测试框架。目标是精简而强大。Unity测试框架的内核是三个文件:单个C
文件和两个头文件。它们相互合作提供许多函数和宏以使得测试更顺滑。

Unity was designed to be cross-platform. It works hard to stick with C standards
while still providing support for the many embedded C compilers that bend the
rules. Unity has been used with many compilers, including GCC, IAR, Clang,
Green Hills, Microchip, and MS Visual Studio. It’s not much work to get it to
work with a new target.
Unity的设计是跨平台的。它尽可能地遵从C标准,同时提供对许多不守规矩的嵌入式C编译器
的支持。Unity已被用在许多编译器上,包括GCC、IAR、Clang、Green Hills、 Microchip和
MS Visual Studio。将其移植到一个新目标上不需要太多工作量。

Overview of the Documents

文档综述

Unity Assertions reference

断言参考文档

This document will guide you through all the assertion options provided by
Unity. This is going to be your unit testing bread and butter. You’ll spend more
time with assertions than any other part of Unity.
这篇文档将带你看遍Unity提供的所有断言选项。这是你单元测试的面包黄油。你将在断言上
花费比Unity其他部分更多的时间。

Unity Assertions Cheat Sheet

断言欺骗表

This document contains an abridged summary of the assertions described in the
previous document. It’s perfect for printing and referencing while you
familiarize yourself with Unity’s options.
这篇文档是之前那个文档中各种断言的一个删减的总结表。特别适合打印出来以备参考。

Unity Configuration Guide

配置向导

This document is the one to reference when you are going to use Unity with a new
target or compiler. It’ll guide you through the configuration options and will
help you customize your testing experience to meet your needs.
当你打算在一个新目标或编译器上使用Unity时,这篇文档是你要参考的。它会将你看遍配置
选项,帮助你定制你自己的测试环境以满足你的需求。

Unity Helper Scripts

脚本

This document describes the helper scripts that are available for simplifying
your testing workflow. It describes the collection of optional Ruby scripts
included in the auto directory of your Unity installation. Neither Ruby nor
these scripts are necessary for using Unity. They are provided as a convenience
for those who wish to use them.
这盘文档描述了helper脚本,helper脚本有助于简化你的测试工作流。它描述了在你的Unity
安装路径下auto文件夹内的那些可用的Ruby脚本。使用Unity并不需要用到Ruby以及这些脚本。
它们只是给想用的人提供一些便利而已。

Unity License

What’s an open source project without a license file? This brief document
describes the terms you’re agreeing to when you use this software. Basically, we
want it to be useful to you in whatever context you want to use it, but please
don’t blame us if you run into problems.
开源项目难道能没有license文件?这篇简短的文档描述了在你使用这个软件时应该同意的条
款。基本上,我们希望不管你想在什么上下文中使用它,它都能对你很有帮助,但是如果你
遇到了问题,请不要责备我们。

Overview of the Folders

文件夹综述

If you have obtained Unity through Github or something similar, you might be
surprised by just how much stuff you suddenly have staring you in the face.
Don’t worry, Unity itself is very small. The rest of it is just there to make
your life easier. You can ignore it or use it at your convenience. Here’s an
overview of everything in the project.
如果你是从Github或其他类似的地方获取Unity的,你很可能被眼前的一堆吓了一跳。
别担心,Unity本身十分的小。其他部分之所以在这只是为了让你的生活过的更好些。
你可以忽视它们或使用它们,全凭你自己做主。这里是工程中所有东西的综述。

  • src - This is the code you care about! This folder contains a C file and two
    header files. These three files are Unity.

  • docs - You’re reading this document, so it’s possible you have found your way
    into this folder already. This is where all the handy documentation can be
    found.

  • examples - This contains a few examples of using Unity.

  • extras - These are optional add ons to Unity that are not part of the core
    project. If you’ve reached us through James Grenning’s book, you’re going to
    want to look here.

  • test - This is how Unity and its scripts are all tested. If you’re just using
    Unity, you’ll likely never need to go in here. If you are the lucky team member
    who gets to port Unity to a new toolchain, this is a good place to verify
    everything is configured properly.

  • auto - Here you will find helpful Ruby scripts for simplifying your test
    workflow. They are purely optional and are not required to make use of Unity.

  • src - 这是你关心的代码!这个文件夹包含一个C文件以及两个头文件。这三个文件 Unity。

  • docs - 你正在读这个文档,所以可能你是自己进到这个文件夹中的。这里放着所有的文档。

  • examples - 这里包含一些使用Unity的示例。

  • extras - 这些是可选的Unity插件,它们不是内核工程的一部分。如果你是通过James Grenning的
    书找到我们的,你会想看看这里。

  • test - 这里是Unity和它的所有脚本被测试的地方。如果你只是在用Unity,很可能你永远不需要
    看这个文件夹。如果你是团队中负责把Unity移植到新工具链的中奖者,这里可以帮助你验证所有东西
    都被合理地配置了。

  • auto - 在这里你将发现一些有用的Ruby脚本,它们可以简化你的测试工作。他们完全只是可选的,
    不用它们照样可以使用Unity。

How to Create A Test File

怎么创建一个测试文件

Test files are C files. Most often you will create a single test file for each C
module that you want to test. The test file should include unity.h and the
header for your C module to be tested.
测试文件都是C文件。大部分情况下,你将为每个你想要测试的C模块创建一个测试文件。
测试文件应该include unity.h以及你要测试的C模块的头文件。

Next, a test file will include a setUp() and tearDown() function. The setUp
function can contain anything you would like to run before each test. The
tearDown function can contain anything you would like to run after each test.
Both functions accept no arguments and return nothing. You may leave either or
both of these blank if you have no need for them. If you’re using a compiler
that is configured to make these functions optional, you may leave them off
completely. Not sure? Give it a try. If you compiler complains that it can’t
find setUp or tearDown when it links, you’ll know you need to at least include
an empty function for these.
下一步,一个测试文件将包含一个setUp()以及tearDown()函数。setUp函数可以包含任何你
想要在每个测试之前运行的东西。tearDown函数可以包含任何你想要在每个测试之后运行的东西。
两个函数都不接受任何参数,也不返回东西。如果你在使用一个将这些函数配置为可选的编译器,
你也许可以不实现他们。不确定?试一试不就知道了。如果你的编译器抱怨说它在链接时找不到
setUp或tearDown,那你就知道你起码需要为它们创建一个空的函数了。

The majority of the file will be a series of test functions. Test functions
follow the convention of starting with the word “test_” or “spec_”. You don’t HAVE
to name them this way, but it makes it clear what functions are tests for other
developers. Also, the automated scripts that come with Unity or Ceedling will default
to looking for test functions to be prefixed this way. Test functions take no arguments
and return nothing. All test accounting is handled internally in Unity.
文件的主体将会是一系列的测试函数。测试函数遵从以下命名约定,以"test_"或"spec_"为开头。
不是必须按照这种方式命名它们,但是这样会使得其他开发者更容易看出哪些函数是测试。同样的,
Unity或Ceedling自带的自动化脚本将默认通过这种前缀的方式来寻找测试函数。测试函数都不接受
任何参数,也不返回东西。所有的测试计数是由Unity内部处理的。

Finally, at the bottom of your test file, you will write a main() function.
This function will call UNITY_BEGIN(), then RUN_TEST for each test, and
finally UNITY_END().This is what will actually trigger each of those test
functions to run, so it is important that each function gets its own RUN_TEST
call.
最终,在你的测试文件的最底下,你将写一个main()函数。这个函数将调用UNITY_BEGIN()
然后为每个测试调用RUN_TEST,然后最终是UNITY_END()。这是实际上触发每个测试函数运行
的地方,所以重要的是,每个函数都要有它自己的RUN_TEST

Remembering to add each test to the main function can get to be tedious. If you
enjoy using helper scripts in your build process, you might consider making use
of our handy generate_test_runner.rb script. This will create the main function
and all the calls for you, assuming that you have followed the suggested naming
conventions. In this case, there is no need for you to include the main function
in your test file at all.
把每个测试加进main函数的过程真是很无聊。如果你喜欢在构建过程中使用helper脚本,你可以
考虑用我们特有用的generate_test_runner.rb脚本。它会为你创建main函数以及所有的调用,
前提是你遵从建议的命名约定。这种情况下,你根本不需要将main函数包含进你的测试文件中。

When you’re done, your test file will look something like this:
当你完成上述步骤,你的测试文件应该看起来像这样:

#include "unity.h"
#include "file_to_test.h"

void setUp(void) {
    // set stuff up here
    // 在这里配置东西
}

void tearDown(void) {
    // clean stuff up here
    // 在这里清理东西
}

void test_function_should_doBlahAndBlah(void) {
    //test stuff
    //测试
}

void test_function_should_doAlsoDoBlah(void) {
    //more test stuff
    //更多测试
}

int main(void) {
    UNITY_BEGIN();
    RUN_TEST(test_function_should_doBlahAndBlah);
    RUN_TEST(test_function_should_doAlsoDoBlah);
    return UNITY_END();
}

It’s possible that you will need more customization than this, eventually.
For that sort of thing, you’re going to want to look at the configuration guide.
This should be enough to get you going, though.
最终,可能你需要更多的定制。这种情况下,你会想看看配置指南。尽管,这应该足够让你
行动了。

How to Build and Run A Test File

怎么构建和运行一个测试文件

This is the single biggest challenge to picking up a new unit testing framework,
at least in a language like C or C++. These languages are REALLY good at getting
you “close to the metal” (why is the phrase metal? Wouldn’t it be more accurate
to say “close to the silicon”?). While this feature is usually a good thing, it
can make testing more challenging.
单个最大的挑战是提取出一个新的单元测试框架,至少在像C或C++这样的语言中。这些语言
很擅长于让你"接近金属(注:貌似是接近本质的俚语)"(为什么这个句子中要用金属?说
"接近硅"不应该更加准确么?)。尽管这个特性通常是个好事情,但它会使得测试更具挑战。

You have two really good options for toolchains. Depending on where you’re
coming from, it might surprise you that neither of these options is running the
unit tests on your hardware.
There are many reasons for this, but here’s a short version:

  • On hardware, you have too many constraints (processing power, memory, etc),
  • On hardware, you don’t have complete control over all registers,
  • On hardware, unit testing is more challenging,
  • Unit testing isn’t System testing. Keep them separate.

你在工具链上有两个真的很好的选择。取决于你的学识,可能你会惊讶这两个选择都没在你
的硬件上运行单元测试。
这有许多原因,但这里是一个短的版本:

  • 在硬件上,你有太多的约束(如处理能力、内存),
  • 在硬件上,你无法完全控制所有的寄存器
  • 在硬件上,单元测试更加有挑战
  • 单元测试不是系统测试。要区分开他们。

Instead of running your tests on your actual hardware, most developers choose to
develop them as native applications (using gcc or MSVC for example) or as
applications running on a simulator. Either is a good option. Native apps have
the advantages of being faster and easier to set up. Simulator apps have the
advantage of working with the same compiler as your target application. The
options for configuring these are discussed in the configuration guide.
大部分开发者选择将单元测试作为本地应用程序(比如使用gcc或MSVC)或运行在模拟器上的应用程
序来开发,而不是在你的真正硬件上运行单元测试。这两个都是好选择。本地应用的优势是配置
起来更加快和简单。模拟器应用程序的优势是使用的是与你目标硬件相同的编译器。配置这两的
选项在配置指南中有探讨。

To get either to work, you might need to make a few changes to the file
containing your register set (discussed later).
为了使任一选择工作,你也许需要对包含你寄存器集的文件做一些修改(之后会讨论)。

In either case, a test is built by linking unity, the test file, and the C
file(s) being tested. These files create an executable which can be run as the
test set for that module. Then, this process is repeated for the next test file.
This flexibility of separating tests into individual executables allows us to
much more thoroughly unit test our system and it keeps all the test code out of
our final release!
在两种情况下,一个测试的构建都要链接unity、测试文件以及被测试的C文件。这些文件创建了
一个可执行文件,这可执行文件可以当做那个模块的测试集来运行。然后,这个过程照搬到下一个
测试文件。拆分测试到独立的可执行文件的灵活性使得我们能更全面的对我们的系统进行单元测试
,并且所有测试代码都不在我们最终的产品代码中。

Find The Latest of This And More at ThrowTheSwitch.org

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity(纯C语言单元测试框架!不是那个Unity3d)入门文档 的相关文章

  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 用于测试分布式系统的集成测试框架?

    我有一个分布式系统 其组件分布在多个盒子中 他们使用 TCP 或多播相互通信 每个组件相互交换消息 这些基本上是序列化的数据结构 我们有哪些集成测试框架来测试此类系统 我熟悉红宝石 所以基于红宝石的东西肯定会有所帮助 我想有不同的方法可以做
  • Typescript:在子方法中覆盖父类的静态工厂方法

    我在使用 Typescript 进行依赖注入时遇到了一些问题 在每个类上 我添加一个工厂静态方法 其中设置了所有依赖项 我这样做是出于测试目的 以便我仍然能够使用 TDD 方法 现在我在子类中重写父类的工厂方法时遇到了一些问题 例子 int
  • NUnit 最佳实践

    环境 Visual Studio Professional 2008 中的 C WinForms 应用程序 我一直在挖掘有关 NUnit 最佳实践的指导 作为一个在相对孤立的环境中工作的独立程序员 我希望这里的集体智慧可以帮助我 斯科特 怀
  • Jasmine 对象“没有方法 'andReturn'”

    茉莉花初学者 茉莉花间谍的第一次尝试 我以为我在模仿格式显示在这里 http pivotal github io jasmine 搜索 andReturn 但我收到一个无法解决的错误 TypeError Object function ca
  • 如何测试具有私有方法、字段或内部类的类?

    如何使用 JUnit 测试具有内部私有方法 字段或嵌套类的类 为了能够运行测试而更改方法的访问修饰符似乎很糟糕 如果你有一些遗产Java应用程序 并且您不允许更改方法的可见性 测试私有方法的最佳方法是使用反射 http en wikiped
  • 如何设计可测试性代码

    我一直在考虑在我未来创建的任何项目中使用 TDD 并实施适当的测试 才刚刚开始了解它如何使您的生活变得更好 因此 在过去的几天里 我一直在 SO 上徘徊 试图了解如何设计可测试性的应用程序 但我似乎仍然在努力解决一些想法 我读过很多你应该编
  • PHPUnit、接口和命名空间 (Symfony2)

    我目前正在为 Symfony2 开发一个开源包 并且真的希望它在单元测试覆盖率和一般可靠性方面成为最优秀的 但是由于我缺乏 PHPUnit 知识 或复杂的场景 谁知道 目前 我有一个 Mailer 类 用于处理个人邮件场景 它看起来有点像这
  • C 编程和 TDD

    测试驱动开发仅限于面向对象吗 或者将它与过程语言结合使用是否可能 有用 接下来的几周我必须开始一个更大的 C 项目 我正在考虑如何开发 TDD 是一个design范例 因此不依赖于任何特定的编程范例 简而言之 在编写代码之前先为代码编写测试
  • VB6 有什么好的 TDD 工具或资源吗?

    是的 我知道我已经落后于时代了 但是我这里有一个古老的 VB6 编辑器应用程序 我相信没有人会很快升级到 NET 它使用了几个第三方 DLL 工具 并且由于它仍然使用旧的 RichEdit 控件 我基本上可以仅用这个工具来创建我自己的 Bu
  • 如何确定 rspec 控制器测试的主题?

    所以除了好奇之外 我没有什么充分的理由需要知道这一点 最好的理由 但我不确定这里发生了什么 背景 我正在研究 RSpec 书并更新示例 第 24 章 Rails 控制器有一个消息控制器的测试 spec controllers message
  • 涵盖 .NET 中的 TDD、DDD 和设计模式的书籍

    我想要一本能够真正让我全面了解使用 C TDD ASP NET MVC DDD 和设计模式 例如存储库模式 的现代 ASP NET 开发的书 我非常擅长 C 和 ASP NET MVC 但想填补空白 如果您对涵盖这些主题的一两本书有很好的体
  • 从头开始一个 TDD 项目

    我读了很多关于 TDD 的问答和关于 SO 的单元测试 但我没有找到任何答案 我从哪里开始 我和团队已经完成了几个项目 在这些项目中 我们对代码采用了单元测试 但先编码 然后单元测试 在开发过程的某个阶段 先编写测试然后编写代码变得很自然
  • 如何TDD UIGestureRecognizers?

    在尝试使用 UIGestureRecognizer 编写 TDD 代码时 我发现无法以编程方式验证目标操作 如果没有这个 我不确定我是否可以正确测试它 如果手势识别器在 IB 中设置 支持 iOS 5 则目标动作会在 NIB Storybo
  • TDD中如何处理接口过度使用?

    我注意到 当我进行 TDD 时 它通常会导致大量的接口 对于具有依赖项的类 它们以通常的方式通过构造函数注入 public class SomeClass public SomeClass IDependencyA first IDepen
  • Team Foundation Build 还是 TeamCity?

    我们主要是一家从事 NET LOB 开发的 MS 商店 我们还在 CRM 应用程序中使用 MS Dynamics 所有开发人员目前都在使用 VS SQL Server 2008 我们也使用 VSS 但每个人在工作中都讨厌它 而且很快就会被淘
  • Python 是否有首选的 BDD 风格单元测试框架?

    我想知道是否有任何 BDD 风格的 描述它 Python 单元测试框架可以维护并准备好投入生产 我已经发现describe https pypi python org pypi describe 0 1 2 但似乎没有维护 也没有文档 我也
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • TDD/测试 CSS 和 HTML? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有办法测试 CSS 和 HTML 例如 有时某些通知会受到某些 CSS 更改的影响 我不想每次进行更改时都手动测试所有通知 Tha

随机推荐

  • matlab计算基础

    目录 1 创建矩阵和向量 2 矩阵的基本运算 2 1 数乘 2 2 转秩 2 3 求逆 2 4 点积 2 5 拼接 3 复数 4 矩阵元素的引用 5 工作区中数据的保存和使用 1 创建矩阵和向量 向量包括行向量和列向量 向量就是个特殊的矩阵
  • 动态链接库-DLL探秘

    在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 现在就让我们走进这些神奇的活动大陆 找出它们隐藏已久的秘密吧 初窥门径 Wind
  • Ceph入门到精通-Macvlan网络模式

    Docker中的Macvlan网络模式提供了一种将容器直接连接到宿主机网络的方式 使得容器可以拥有自己的MAC地址和与宿主机网络的直接连接 以下是使用Macvlan网络模式的一般步骤 创建Macvlan网络 docker network c
  • 通过uniapp打包生成的ipa安装包如何上架appstore

    通过uniapp打包生成的ipa安装包如何上架appstore 今天刚接手一个发布在android和ios平台的uniapp项目 因为我之前没有上线appstore平台的经验就专门了解了一下之前的上架流程 对于如何获取ios开发证书 发布证
  • 真正解决ScrollView嵌套RecyclerView的显示不全及滑动问题

    很多人都会遇到ScrollView嵌套RecyclerView嵌套的问题 各种嵌套模式 这种嵌套会出现以下几种问题 1 ScrollView和RecyclerView两者都会滑动 而且有时候 滑动会冲突 2 RecyclerView显示不全
  • 基于Bert的提示学习(prompt)文本分类

    1 介绍 1 1任务描述 1 2任务说明 2 建立模型 3 数据加载 4 训练 1 介绍 1 1任务描述 商品同款挖掘 同款商品是指商品的重要属性完全相同且客观可比的商品 商品同款识别的主要目的是从海量结构化和无结构化的商品图文数据库中匹配
  • 双模态情感分析

    1 任务介绍 2 建立模型 1 任务介绍 在做情感分析任务是 一般是通过纯文本进行判断的 或者通过语音来判断 现结合语音 文本双模态来进行情感分析 2 建立模型 from keras layers import from mult emti
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(未知)阴影映射

    未完成 黑近白远 oglmanager h ifndef OGLMANAGER H define OGLMANAGER H include
  • 熄灯问题

    有一个由按钮组成的矩阵 其中每行有6个按钮 共5行 每个按钮的位置上有一盏灯 当按下一个按钮后 该按钮以及周围位置 上 下 左 右 的等都会转变状态 即 如果灯原来是点亮的 就会被熄灭 如果灯原来是熄灭的 则会被点亮 在矩阵角上的按钮改变3
  • 【3D人脸】Open3D学习笔记 一

    最近头疼于点云法向量的计算 实在找不到python的相关资料 想起来Open3D这个专门的工具 一搜还真有 踩了很多坑 记录一下 Open3D官方文档 http www open3d org docs release index html
  • uniapp(二) 之 uniapp 搭建与组件库的引用

    小扩展 rpx responsive pixel 可以根据屏幕宽度自适应 规定屏幕宽度为750rpx 如果iphon6上 屏幕宽度为375px 共有750个像素 则750rpx 375培训 750物理像素 1rpx 0 5px 1物理像素
  • 自定义类型 (结构体)

    文章目录 结构体的声明 1 结构的基础知识 2 结构的声明 3 特殊的声明 4 结构的自引用 5 结构体变量的定义和初始化 6 结构体内存对齐 7 修改默认对齐数 8 结构体传参 结构体的声明 1 结构的基础知识 结构是一些值的集合 这些值
  • Mac VSCode常用快捷键

    cmd option gt cmd option lt 返回上 下一个光标位置 cmd p 打开文件搜索框 control 返回 control shift 前进 补充
  • 工具及方法 - Process Explorer以及类似工具,用来获取系统运行的进程信息

    下载Process explorer Process Explorer Sysinternals Microsoft Learn Process explorer简介 有没有想过哪个程序打开了一个特定的文件或目录 现在你可以找到了 Proc
  • BDA初级分析——可视化图形

    一 时间趋势 时间趋势要如何呈现 Excel函数补充 YEAR 提取日期中的年份 MONTH 提取日期中的月份 DAY 提取日期中的天 HOUR 提取时间中的小时 TEXT 将数值转换为按指定数字格式表示的函数 写法 TEXT value
  • 提交表单--get与post方式

    我们经常在网页上输入信息 然后通过按钮提交 有两种提交方式 get和post get方式效率高但安全性低 post是封装后进行提交安全性高 get方式经常用于搜索 查询 post常用与用户注册登陆等 提交表单标签
  • 【Sibelius】制谱软件 (西贝柳斯)入门笔记

    首先声明 本人非音乐专业 连业余爱好者都算不上 因为小女是音乐生 为了填补代沟 所以就整点音乐相关的软件玩玩 又怕自己忘了 做个笔记 笔记主要是从B站学习的 链接 https www bilibili com video BV1Kb4114
  • 成功解决VS编译时提示“已经在 LIBCMT.lib(xxx) 中定义“

    报错信息 解决方法 在项目右击 gt 属性 gt 连接器 gt 命令行 gt 附加选项中 添加 force
  • 【小程序】使用wxParse解析html

    小程序在开发时 读取到服务器的内容是html格式的 因小程序不支持html格式的内容显示的 因此要对html格式的内容进行编译 可以通过wxParse来实现 wxParse下载地址 实现方法 将下载下来的wxParse文件夹复制到开发项目的
  • Unity(纯C语言单元测试框架!不是那个Unity3d)入门文档

    译者注 译者博客 http blog csdn net lin strong 转载请保留这条 此为Unity手册的翻译 仅供学习交流使用 请勿用于商业用途 翻译的资料是公开的 在docs UnityGettingStartedGuide m