Unit testing 什么';风格';有多少测试框架?

Unit testing 什么';风格';有多少测试框架?,unit-testing,testing,tdd,bdd,Unit Testing,Testing,Tdd,Bdd,在我看来,自SUnit、JUnit和常见的xUnit测试框架以来,测试已经取得了长足的进步 我研究并想了解“行为驱动”测试是关于什么的,但现在我想知道还有哪种编写单元测试的方法 我对任何特定的语言都不感兴趣,但对测试代码的一般思想和方法更感兴趣 所以,我的问题是,单元测试有哪些风格不同的方法,即不同于“断言”的方法 让我举几个例子: 单元测试的xUnit样式在您的favorit语言中大致如下所示: stack = new Stack() assertTrue (stack.empty())

在我看来,自SUnit、JUnit和常见的xUnit测试框架以来,测试已经取得了长足的进步

我研究并想了解“行为驱动”测试是关于什么的,但现在我想知道还有哪种编写单元测试的方法

我对任何特定的语言都不感兴趣,但对测试代码的一般思想和方法更感兴趣

所以,我的问题是,单元测试有哪些风格不同的方法,即不同于“断言”的方法

让我举几个例子:

单元测试的xUnit样式在您的favorit语言中大致如下所示:

stack = new Stack()
assertTrue  (stack.empty())

stack.push(1)
assertFalse (stack.empty())
assertEquals(1, stack.top())
RSpec风格的单元测试看起来很像这样(大致是即兴的):

还有其他有趣的样式、符号、“DSL”吗?
当然,每种语言和框架都会有不同的主题,但是是否有不同的通用“主题”/样式?

就个人而言,我非常喜欢给定的When,然后键入语法进行测试

Given some particular situaion
When some action occurs
Then there will be an outcome that can be verified.

我开始采用这种方法时使用了诸如和.NET之类的工具,这些工具非常整洁。从那以后,我开始写我自己的,更适合我个人风格的,但还不是特别成熟。

就我个人而言,我真的很喜欢给定的,When,Then,type语法进行测试

Given some particular situaion
When some action occurs
Then there will be an outcome that can be verified.

我开始采用这种方法时使用了诸如和.NET之类的工具,这些工具非常整洁。从那以后,我开始写我自己的,更适合我自己的风格,但还不是特别成熟。

我只能想到两种测试风格。以代码为中心(xUnit和RSpec给出了上面的代码)和以行为为中心(cumber,SpecFlow-given/Then/When)。 现在,您可以在以代码为中心的框架(代码#1)中进行行为样式的测试

您还有三种类型的测试:

  • Mockists—大多数依赖项都(严格地)被模拟
  • Stubbists-大多数依赖项都是存根的
  • 集成-大多数依赖项都是真实的
代码#1:


我只能想到两种测试方式。以代码为中心(xUnit和RSpec给出了上面的代码)和以行为为中心(cumber,SpecFlow-given/Then/When)。 现在,您可以在以代码为中心的框架(代码#1)中进行行为样式的测试

您还有三种类型的测试:

  • Mockists—大多数依赖项都(严格地)被模拟
  • Stubbists-大多数依赖项都是存根的
  • 集成-大多数依赖项都是真实的
代码#1:


我不确定我是否完全正确地理解了你的问题。有一些单元测试框架,如NUnit、VisualStudio中内置的框架以及其他一些框架。这些可用于基于状态的测试。如果您还想使用基于行为的测试,您可能需要使用一个隔离(mock)框架,例如rhinomock、MOQ、TypeMock等等。。。此外,您还可以执行集成测试,以便一起测试多个组件。自动化UI测试是另一种工具,例如用于测试web服务的soapUI(尽管我将其视为集成测试)。我试图扩展这个问题。希望它能更清楚地表达出来。我不确定它是否符合您的问题,但我见过开发人员在jUnit测试中添加
//Given
//When
//Then
注释,通过描述先决条件、测试事件和预期结果来帮助编写它们。@DamienPollet,是的,这就是我要寻找的东西。通过你的关键词,我发现了一个有趣的链接:我不确定我是否完全正确理解了你的问题。有一些单元测试框架,如NUnit、VisualStudio中内置的框架以及其他一些框架。这些可用于基于状态的测试。如果您还想使用基于行为的测试,您可能需要使用一个隔离(mock)框架,例如rhinomock、MOQ、TypeMock等等。。。此外,您还可以执行集成测试,以便一起测试多个组件。自动化UI测试是另一种工具,例如用于测试web服务的soapUI(尽管我将其视为集成测试)。我试图扩展这个问题。希望它能更清楚地表达出来。我不确定它是否符合您的问题,但我见过开发人员在jUnit测试中添加
//Given
//When
//Then
注释,通过描述先决条件、测试事件和预期结果来帮助编写它们。@DamienPollet,是的,这就是我要寻找的东西。通过你的关键词,我发现了一个有趣的链接:
@Test
public void theScenarioDescription() {
    givenThatSomething();
    whenIWiggleIt();
    thenSomethingHasHappened();
}