我是BDD的全新手,我想了解它在开发周期中的作用.在TDD方法中,我们通常会为库或apis编写单元测试,我们会模拟对象,这很好,因为它甚至可以驱动我们的设计.这些测试将在实际代码之前编写,这很好.
我知道BDD更多的是关于规范/场景测试,我可以看到它非常适合根据实际代码测试业务需求.但是编写这些测试的最佳实践是什么?我们是否仍然继续编写单独的测试(如在TDD中)模拟出依赖关系并为可能出错的每一件事编写单元测试?然后写我们的bdd测试?我们首先编写bdd测试吗?我们是否只针对单个组件编写bdd测试?
我使用.NET并且通常编写asp.net mvc应用程序,但这更像是一个理论问题而且独立于底层编程语言.
非常感谢.
我将创建现有自动化C++重构工具的比较表,并探索创建此类工具(自由和开源)的能力.
我的问题是:你在日常工作中真正使用了哪些重构?有一些显而易见的事情,比如重命名变量/类/方法,但是有没有特定于C++的东西,比如处理模板,STL,复制构造函数,初始化器等等?
我有兴趣构建C++开发人员每天在编码中面临的所有小问题的真实画面,并且至少在理论上可以实现自动化.我和同事说话但这可能还不够.
提前致谢.
有人可以举例说明如何使用接近传感器吗?我尝试以与其他传感器相同的方式使用它,但它不起作用.
这是我一直在使用的代码片段:
final SensorManager mSensorManager;
final Sensor mproximity;
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mproximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
mSensorManager.registerListener(new SensorListener(){
public void onAccuracyChanged(int arg0, int arg1) {
// TODO Auto-generated method stub
Toast.makeText(test.this,"proximity sensor accu ", Toast.LENGTH_SHORT).show();
}
public void onSensorChanged(int arg0, float[] arg1) {
// TODO Auto-generated method stub
Toast.makeText(test.this,"proximity sensor ", Toast.LENGTH_SHORT).show();
}
}, Sensor.TYPE_PROXIMITY, 1);
Run Code Online (Sandbox Code Playgroud)
请告诉我哪里出错了.
我看到有几个问题基于这个主题,但我有一些具体的例子,我正在努力.我希望有人可以在这里帮助我,因为我是新手测试驱动开发和单元测试.
(我不确定它是否重要,但我使用的是C#与.NET framework 4.0并使用Microsoft的内置测试框架)
首先,是否值得测试非常简单的代码块?例如,对于我的一个类,我有一个Fill方法,它接受10个参数,并根据这些参数设置类中10个属性的值.填充代码实际上只是一系列值设置语句.我已经读过一个好的单元测试应该只断言一件事,但在我看来,为了检查所有这些值是否已正确设置,我必须断言10件事.所以要么我根本不能测试它,相信代码很简单,或者写10个不同的单元测试来检查每个属性.这些都是正确的吗?
第二个例子.我有一个代码块,可以调用一个类的私有方法,最后调用一个Web服务来向用户发送一封电子邮件.我知道我应该为电子邮件服务注入一个模拟Web服务,这样我就不会测试多个类,但是我应该如何测试所有这些私有方法和那个电子邮件调用?
第三个例子与上一个例子类似.我的班级结构看起来像:
控制器---取决于---> IWidget(某些业务对象)&& IDataProvider DataProvider(Implements IDataProvider)---取决于---> WebService WebService ---直接调用--->数据库
现在我有控制器的单元测试(注入模拟Widgets和DataProviders).这一切都很好.我也有Widget的单元测试没有问题.
问题归结于DataProvider和WebService.此特定实例中的WebService除了通过数据提供者的请求并传回数据(由于物理体系结构限制)之外什么都不做.
我无法对DataProvider进行单元测试,因为我不确定如何注入模拟Web服务.我也不确定单元测试DataProvider是否值得,因为我最终只需要编写很多模拟数据集来测试值.同样,我不确定如何对Web服务进行单元测试,因为在这种情况下,WebService的主要功能取决于数据库.再一次,这值得测试吗?如果WebService做了更多,除了仅作为传递但仍依赖于数据库,该怎么办?
我非常感谢任何人在这方面可以提出的任何建议.非常感谢.
SQL Server中是否有关键字或元信息会告诉您TOP是否生效?
EX:
Select TOP 5 * From Stuff
RESULT: 5 rows
Run Code Online (Sandbox Code Playgroud)
确定是否有6个或更多的最佳方法是什么?
I could do:
SELECT TOP 6 count(*) FROM Stuff
Run Code Online (Sandbox Code Playgroud)
但我担心单独调用检索计数,因为实际查询比这个和大型表复杂得多.
谢谢!
我有以下规格
BidirectionalGraph Fixture = new BidirectionalGraph();
public void VerticesShouldBeAbleToAssociateMultipleEdges()
{
int a = 0;
int b = 1;
int c = 2;
Fixture.AddEdge(a, b);
Fixture.AddEdge(b, c);
Fixture.AddEdge(c, a);
Fixture.EdgesFrom(a).Should().BeEquivalentTo
( new []{a, b}
, new []{a, c});
}
Run Code Online (Sandbox Code Playgroud)
其中 EdgesFrom 定义如下
public IEnumerable<int[]> EdgesFrom(int vertex)
Run Code Online (Sandbox Code Playgroud)
但是我的测试失败了
Result Message: Expected collection
{{0, 1}, {0, 2}} to be equivalent to
{{0, 1}, {0, 2}}.
Run Code Online (Sandbox Code Playgroud)
这对我来说不太有意义,因为它们显然是等效的。FluentAssertions在比较集合的集合时不起作用吗?
我希望能够在Android Studio中进行单元测试和仪器测试,并在其中使用Mockito.
我在Android Studio 0.8中使用新方法进行测试.这是:
如何在我的测试中编写代码,这些代码依赖于仅用于测试的库,例如mockito或hamcrest?
我想在编译和运行测试时包含这些库,但要避免将它们导出到已发布的.apk.
在https://code.google.com/p/mockito/wiki/DeclaringMockitoDependency中,我读过我应该将依赖项添加为:
dependencies {
....
testCompile "org.mockito:mockito-core:1.9.5"
}
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时我得到:
构建脚本错误,找不到支持的Gradle DSL方法:'testCompile()'!
虽然我不确定它是否相关,但我使用的gradle构建文件是:
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':android-sdk')
testCompile "org.mockito:mockito-core:1.9.5"
}
android {
compileSdkVersion 19
buildToolsVersion "20.0.0"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
} …Run Code Online (Sandbox Code Playgroud) 我读过关于TDD的文章,我在我的新项目中尝试过.

据我所知,在TDD中,它就像是黑盒测试,即它重要的是什么而不是如何.因此,我在许多帖子上阅读了它之后总结并停止测试私有方法,因为它不是正确的方法.
但是,由于这些原因,我没有这样做.
我将通过示例向您展示:我有一个程序读取文本段落,所以我在我的测试方法中写了这样的东西(对于tdd step1).
/*
My program reads a textual paragraph from file and saves it to my custom paragraph object;
*/
Run Code Online (Sandbox Code Playgroud)
因此,我采用这种方法来创建RED案例.
public void paragraphMustNotBeNullTest(){
File f = new File("some path")
ParagraphReader reader= new ParagraphReader();
reader.read();
assertNotNull("my custom paragraph is null",reader.getCustomParagraph());
}
Run Code Online (Sandbox Code Playgroud)
我写了以下代码:
package com.olabs.reader;
import java.io.FileInputStream;
import java.io.InputStream;
import com.olabs.models.OlabsParagraph;
public class Para {
private String paragraphText = null;
private Paragraph oParagraph = null;
public Paragraph getCustomParagraph() {
return oParagraph;
} …Run Code Online (Sandbox Code Playgroud) 我有一个表,其中每列是一个问题,行是答案,可以假设从1到4的值
每个问题计算每个答案的出现次数的最有效方法是什么?
输入表
q1 q2 q3
1 3 1
2 1 4
1 2 1
Run Code Online (Sandbox Code Playgroud)
期望的输出表
answer q1 q2 q3
1 2 0 2
2 1 1 0
3 0 1 0
4 0 0 1
Run Code Online (Sandbox Code Playgroud)
到目前为止,我到达了以下(针对q3问题),但这只是针对一个问题
CREATE TABLE #t
(
answer int
)
insert into #t (answer) values (1)
insert into #t (answer) values (2)
insert into #t (answer) values (3)
insert into #t (answer) values (4)
select * into #q3 from (select q3 as q3,count(*) as occurenceq3
from …Run Code Online (Sandbox Code Playgroud) 我知道如何使用nightwatch发送点击事件:
browser.click('#my-control');
Run Code Online (Sandbox Code Playgroud)
但我一直无法找到发送关键事件的方法.怎么在夜视仪上完成?
tdd ×4
android ×2
sql ×2
sql-server ×2
unit-testing ×2
.net ×1
bdd ×1
c# ×1
c++ ×1
collections ×1
hamcrest ×1
java ×1
keypress ×1
mockito ×1
proximity ×1
refactoring ×1
selenium ×1
sensor ×1
t-sql ×1
testing ×1
web-services ×1