我是我(非常小)公司中唯一的开发人员,我即将开始为该公司开发一个中型ASP.NET Web应用程序.
我想弄清楚我是否应该学习测试驱动开发(TDD)并在此应用程序中实现它.
我需要很快开始开发我们的新应用程序,我担心测试.我已编程多年但从未进行任何单元测试.
我已经阅读了很多关于TDD的在线资源,但我不确定我是否会对它进行"足够好"的掌握以使其在应用程序中有效.
在bash中编写多个简单的脚本时,我常常想知道如何使代码可测试.
通常很难为bash代码编写测试,因为它在获取值并返回值的函数上很少,而在检查和设置环境中的某些方面的函数中很高,修改文件系统,调用程序等 - 依赖于环境或具有副作用的功能.因此,设置和测试代码变得比它们测试的代码复杂得多.
例如,考虑一个简单的测试函数:
function add_to_file() {
local f=$1
cat >> $f
sort -u $f -o $f
}
Run Code Online (Sandbox Code Playgroud)
此功能的测试代码可能包括:
add_to_file.before:
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
add_to_file.after:
bar
baz
foo
qux
Run Code Online (Sandbox Code Playgroud)
和测试代码:
function test_add_to_file() {
cp add_to_file.{before,tmp}
add_to_file add_to_file.tmp
cmp add_to_file.{tmp,after} && echo pass || echo fail
rm add_to_file.tmp
}
Run Code Online (Sandbox Code Playgroud)
这里有5行代码由6行测试代码和7行数据测试.
现在考虑一个稍微复杂的案例:
function distribute() {
local file=$1 ; shift
local hosts=( "$@" )
for host in "${hosts[@]}" ; do
rsync -ae ssh $file $host:$file
done
}
Run Code Online (Sandbox Code Playgroud)
我甚至不能说如何开始为此测试...
那么,有一个很好的方法在bash脚本中做TDD,还是我应该放弃并把我的努力放在别的地方?
在rspec中:我可以像在xUnit样式测试框架中那样将消息附加到支票上吗?怎么样?
assert_equal value1, value2, "something is wrong"
Run Code Online (Sandbox Code Playgroud) 我有以下IntegrationTest项目结构......

如果我想使用测试数据126.txt中的NUnit Test,我怎么加载普通的txt文件的数据?
注意:文件是-linked-,我正在使用c#(如图所示).
欢呼:)
当我创建一个新的模拟时,我需要调用expected方法.到底是做什么的?它的论点怎么样?
$todoListMock = $this->getMock('\Model\Todo_List');
$todoListMock->expects($this->any())
->method('getItems')
->will($this->returnValue(array($itemMock)));
Run Code Online (Sandbox Code Playgroud)
我找不到任何原因(我试过docs).我已经阅读了这些消息来源,但我无法理解.谢谢.
我使用c#并进行单元测试和集成测试通常我需要根据属性自动填充字段.
假设我们将测试是否可以编写并将用户数据写回数据库.
是否有任何框架自动填充用户的测试数据并检查两个对象是否具有相同的值?
示例代码可能是这样的
User user = new User();
AutoPopulator.Populate(user);
user.Save();
Run Code Online (Sandbox Code Playgroud) 我试图包括一些助手用rspec测试,但没有运气.
我做了什么:
support/helpers.rb在我的spec文件夹下创建了一个文件
支持/ helpers.rb
module Helpers
include ActionView::Helpers::NumberHelper
include ActionView::Helpers::TextHelper
end
Run Code Online (Sandbox Code Playgroud)
并试图要求这个文件spec_helper.rb.
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'rubygems'
require 'spork'
require 'support/helpers'
Spork.prefork do
.
.
end
Run Code Online (Sandbox Code Playgroud)
这会生成以下错误:
/spec/support/helpers.rb:2:in `<module:Helpers>': uninitialized constant Helpers::ActionView (NameError)
Run Code Online (Sandbox Code Playgroud)
我应该如何使用Rspec提供这些助手?
谢谢.
我真的很难理解单元测试.我确实理解TDD的重要性,但我读到的所有单元测试的例子似乎都非常简单和微不足道.例如,测试以确保设置属性或将内存分配给数组.为什么?如果我编码..alloc] init],我真的需要确保它有效吗?
我是开发新手,所以我肯定我在这里缺少一些东西,特别是围绕TDD的所有热潮.
我认为我的主要问题是我找不到任何实际的例子.这是一种setReminderId 似乎很适合测试的方法.什么是有用的单元测试看起来确保这是有效的?(使用OCUnit)
- (NSNumber *)setReminderId: (NSDictionary *)reminderData
{
NSNumber *currentReminderId = [[NSUserDefaults standardUserDefaults] objectForKey:@"currentReminderId"];
if (currentReminderId) {
// Increment the last reminderId
currentReminderId = @(currentReminderId.intValue + 1);
}
else {
// Set to 0 if it doesn't already exist
currentReminderId = @0;
}
// Update currentReminderId to model
[[NSUserDefaults standardUserDefaults] setObject:currentReminderId forKey:@"currentReminderId"];
return currentReminderId;
}
Run Code Online (Sandbox Code Playgroud) Rails /工具特定版本:您的单元测试有多深?
现在,我现在写道:
有时这是完全必要的; 有必要测试模型中对最终用户来说并不完全明显或可见的行为.当模型很复杂时,一定要进行测试.但有时候,在我看来,测试是多余的.举例来说,你的测试方法foo如果只是通过所谓的bar,并bar进行测试?如果bar是在Cucumber特性中使用并且可以在黄瓜特征中轻松测试的模型上的简单辅助方法怎么办?你在rspec和Cucumber中测试方法吗?我发现我自己为此而努力,为编写更多的测试需要时间和保持什么是有效的同样的行为,这使得维护测试套件的更多的时间密集,这反过来又使修改更昂贵的多个"版本".
简而言之,您是否认为有时候只写Cucumber功能就足够了?或者你应该总是在每个级别测试?如果您认为存在灰色区域,那么"这需要功能/单元测试"的阈值是多少.实际上,你现在做什么,为什么(或为什么不)你认为这已经足够了?
编辑:这是一个可能是"测试矫枉过正"的例子.不可否认,我能够很快写出来,但这完全是假设的.