相关疑难解决方法(0)

重复代码在单元测试中是否更容易被容忍?

我不久前破坏了几次单元测试,当时我经历并重构它们以使它们更加干燥 - 每次测试的意图都不再清晰.似乎在测试的可读性和可维护性之间存在权衡.如果我在单元测试中留下重复的代码,它们更具可读性,但是如果我更改了SUT,我将不得不追踪并更改重复代码的每个副本.

你是否同意这种权衡存在?如果是这样,您是否希望您的测试具有可读性或可维护性?

unit-testing dry code-duplication

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

预期异常后,PHPUnit不会继续测试

为什么PHPUnit不会在此代码中执行最后的异常断言?

public function testConfigOverriding()
{
    $this->dependencyContainer = new DependencyContainer(__DIR__ . "/../../Resources/valid_json.json");
    $this->assertEquals('overriden', $this->dependencyContainer->getConfig('shell_commander')['pygmentize_command']);

    $unexisting = "unexisting_file";
    $this->setExpectedException('Exception', "Configuration file at path \"$unexisting\" doesn't exist.");
    $this->dependencyContainer = new DependencyContainer($unexisting);

    $invalid = __DIR . "/../../Resources/invalid_json.json";
    $this->setExpectedException('Exception', "Configuration JSON file provided is not valid.");
    $this->dependencyContainer = new DependencyContainer($invalid);
}
Run Code Online (Sandbox Code Playgroud)

所以基本上:它测试是否抛出了"unexsisting_file"异常,但完全忽略了"无效的json"测试.我是否需要为每个抛出的异常进行单独的测试?

php phpunit exception

22
推荐指数
3
解决办法
7160
查看次数

C#如何使用AutoFixture简化单元测试字符串参数

我正在尝试创建一种在单元测试中测试字符串参数的简单方法,对于大多数字符串参数,我想在参数为Null,Empty或仅包含空格时检查行为.

在大多数情况下,我使用string.IsNullOrWhiteSpace()检查参数,如果它具有这三个值中的一个,则抛出异常.

现在进行单元测试,似乎我必须为每个字符串参数编写三个单元测试.一个用于空值,一个用于空值,一个用于空白.

想象一个带有3或4个字符串参数的方法,然后我需要编写9或12个单元测试...

任何人都可以想出一个简单的方法来测试这个吗?也许使用AutoFixture?

c# unit-testing autofixture

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

禁用给定模块或目录的pylint消息

有没有办法duplicate-code只为测试文件禁用Pylint的消息?我们项目中的所有测试都是DAMP,因此重复的代码是设计的.我知道我们可以在# pylint: disable=duplicate-code整个测试过程中添加,但宁可添加一些规则,说明文件test/夹下的所有文件都会禁用此规则.有没有办法做到这一点?

更具体地说,我正在寻找与"运行两次"解决方案不同的东西(这是我已经重新开始的).

python unit-testing pylint

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

Angular 2/TypeScript:@ Input/@输出或输入/输出?

在Udemy上做一门课程的时候,我们一直在允许组件使用@Input()组件类中的装饰器传递数据.

在通过ngBook-2阅读时,我发现input@Component装饰器中使用该属性还有另一种方法.

关于SO的这个类似的问题,一个人回答说:

使用输入的一个优点是类的用户只需要查看传递给@Component装饰器的配置对象以查找输入(和输出)属性.

并查看文档说明:

无论您使用输入/输出还是@ Input/@输出,结果都是相同的,因此选择使用哪一个主要是一种风格决定.

实际上,最有用的信息主要是相互矛盾的,具体取决于你的外观.

在@Component里面

 @Component({
  selector: 'product-image',
  inputs: ['product'],
  template: `
  <img class="product-image" [src]="product.imageUrl">
})

class ProductImage {
  product: Product;
}
Run Code Online (Sandbox Code Playgroud)

内部课程

@Component({
  selector: 'product-image',
  template: `
  <img class="product-image" [src]="product.imageUrl">
})

class ProductImage {
  @Input() product: Product;
}
Run Code Online (Sandbox Code Playgroud)

我想知道的事情

  • 更多的是"最佳实践"用法?
  • 你什么时候用一个而不是另一个?
  • 有任何差异吗?

typescript angular

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

您的测试应该如何详细/精细?

我最近开始了一个新项目,我决定对大多数函数采用写单元测试.在此之前,我的测试仅限于偶尔编写测试"函数"以确保按预期工作,然后从不打扰更新测试函数,显然不是很好.

现在我已经编写了大量代码和测试,我注意到我正在为我的代码编写大量测试.我的代码通常非常模块化,从某种意义上说,我尝试编写简单的小函数,然后根据需要将它们链接在一个更大的函数中,再次接受最佳实践.

但是,我现在最终为各个"构建块"函数(非常小的测试)编写测试,以及将它们链接在一起的函数测试,并在那里测试结果,显然结果会有所不同,但由于输入相似,我正在复制很多测试代码(设置输入部分,每个输入部分略有不同,但不是很多,因为它们不相同我不能只使用文本夹具..).

另一个问题是我尝试严格遵守每个测试测试一件事,所以我为函数中的每个不同特性编写了一个测试,例如,如果有一些额外的输入可以传递给函数,但是它是可选的,我写了一个版本添加了输入,一个没有,并单独测试它们.这里的设置大部分都是相同的,除了我添加的输入,再次不完全相同,所以使用夹具感觉不对"正确".

由于这是我的第一个项目,所有内容都经过了全面的单元测试,我只是想确保我正确地做了一些事情并且测试中的代码重复是可以预期的.所以,我的问题是:我做得对吗?如果没有,我应该改变什么?

我用C和C++编写代码.

另外,我喜欢测试本身,现在我对我的代码更加自信.

谢谢!

c++ unit-testing

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

创建单个共享模拟对象或每个单元测试一个

我目前正在利用Mock对象扩展我的单元测试(在这种特殊情况下为nSubsitute).但是我想知道创建Mock对象时当前的智慧.例如,我正在处理一个包含各种例程的对象来获取和处理数据 - 这里没什么大不了的,但它将在相当多的测试中使用.

我是否应该创建一个共享函数来返回Mock对象,其中包含针对大多数Testing项目模拟的所有适当方法和行为,并将该对象调用到我的单元测试中?或者我应该将对象模拟到每个单元测试中,只模拟我测试所需的行为(尽管有时候我会不止一次地嘲笑相同的行为).

感激地收到了想法或建议......

unit-testing mocking

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

Rails 测试 - has_many 关联的固定装置

我是单元测试的新手,并且有一个简单的用例。

有 2 种模型:CityResident。一个城市有很多居民。

我创建了 2 个固定装置 yml 文件:cities.yml、residents.yml。

居民.yml

resident1:
  name: resident1

resident2:
  name: resident2

resident3:
  name: resident3
Run Code Online (Sandbox Code Playgroud)

城市.yml

city1:
  name: city1
  residents: resident1, resident2, resident3
Run Code Online (Sandbox Code Playgroud)

当我运行一个应该总是通过的简单测试时,我收到一个错误

Minitest::UnexpectedError: ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'residents' in 'field list': INSERT INTO `cities` (`name`, `residents`, `created_at`, `updated_at`, `id`) VALUES ('city1', 'resident1, resident2, resident3', '2014-06-09 20:42:22', '2014-06-09 20:42:22', 574963714)
Run Code Online (Sandbox Code Playgroud)

期望的是拥有一个带有 property 的 City 模型实例name: 'city1',以及一个residents包含 3 个 Resident 模型实例的数组的 property 。

在 …

testing fixtures ruby-on-rails-4

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

PHP For循环随机整数

我是相当新的PHP,我试图解决这个问题,我需要做一个for循环从范围(1,20)生成10个随机数,然后输出它们是奇数还是偶数.

我虽然坚持这一点.到目前为止,我在下面有这个,但我知道它错了.任何帮助或指导将不胜感激.

$rand120 = rand(1, 20); 

for($rand120 = 10; $rand120 <= 20; $rand120++); 
{ 
    echo "$rand120"."<br/>"; 
} 

if ($rand120 % 2 === 0) { 
    echo "$rand120 is even </br>"; 
} else { 
    echo "$rand120 is odd </br>"; 
}
Run Code Online (Sandbox Code Playgroud)

php for-loop

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