不稳定的代码真让我恼火。
以下因素使oo代码变得不稳定:
全局状态,例如单例设计模式
执行一些奇特工作的静态方法,例如数据库访问
深层遗传树
在构造函数中工作,例如控制语句
违反单一责任原则的类
是否有更多警告标志?硬编码依赖项。
不编程到接口
在不使用工厂/IOC的情况下更新对象
所有这些都不会使代码变得不稳定。它们可能会使查找边缘案例bug变得更加困难,但是,如果您已经完全指定了测试的成功标准(并且测试驱动开发可以简化这一过程),那么您所要做的就是通过这些标准
TDD可以应用于特定部件以
我正在寻找代码覆盖率的一些不良副作用的真实例子
我最近在工作中注意到了这种情况,因为有一项政策要求实现100%的代码覆盖率。代码质量确实在提高,但相反地,测试人员似乎在编写更宽松的测试计划,因为“代码是完全经过单元测试的”。结果,一些逻辑错误成功地漏掉了。调试它们真的很痛苦,因为“代码是完全经过单元测试的”
我认为这部分是因为我们的工具只提供声明覆盖。不过,这本可以是更好的时间
如果任何人有代码覆盖政策的其他负面影响,请分享。我想知道现实世界中正在发生什么样的“问题”
提前谢谢
编辑:谢谢你的回
我使用VS2008 professional,并使用单元测试
有时,我会得到一个错误:error:“异常已被调用的目标抛出。”
我做了什么和没做什么:
在安全模式下启动Visual Studio(参数/安全模式)
启动Visual Studio并重置用户数据(参数/resetuserdata)
我做这个“devenv/safemode”,“打开解决方案”,“构建”,“清理”,“重建”,“交叉手指”,“运行所有测试”
没有解决办法……:')这是一场噩梦
任何解决方案,请打开团队资源管理器并连接到
我正在使用NHibernate进行数据访问。我正在为我的数据访问层编写一些测试,并在一个场景中选择特定日期范围内的记录
在测试中,我通过选择某个范围内的随机日期生成测试数据,然后尝试选择日期在该范围子集内的记录。例如,我生成日期介于昨天和明天之间的记录,然后只选择日期为今天的记录
问题是这些日期通常由DB生成——它们基本上被设置为generated=“insert”。是否有一种方法可以设置NHibernate,以便在用户未提供日期时使用DB生成的日期
如果没有,任何人都有在测试期间缓解此问题的策
长期观察者,第一次提问者。在一个单独的项目中使用单元测试,我不知道如何在发布版本中将它们分开
当然,当我删除对单元测试项目的引用时,所有对单元测试接口的引用都将无法找到接口,并将导致编译器错误
谢谢你的帮助
编辑:分离是指在发布版本中删除它们。假设.NET,您的单元测试项目应该有一个对生产项目的引用,但不是相反。您的生产代码不应该完全依赖于您的单元测试。假设.NET,您的单元测试项目应该有一个对生产项目的引用,而不是相反。您的生产代码根本不应该依赖于单元测试。您应该构建两个项目,以便基础代码(您
我的整个工作环境是基于Linux的(Ubuntu用于桌面和服务器)。我使用Hudson和Selenium在我的EE6/ZK web应用程序上执行测试,并且可以使用Ubuntu上的任何浏览器
但是,如果不在Windows中设置Selenium服务器,我如何使用IE(Windows)测试我的应用程序呢。本以为我可以在VMWare或Virtualbox中运行Windows,但它仍然需要“本地”selenium,我将如何触发它?同时安装hudson,并在Windows中复制完整的CI?麦克怎么样
有关于
关于单元测试的两个问题
我一直在写单元测试
有一段时间,但他们通常
我已经写过的测试类。
最近我读了
(注意一篇旧文章)上面说
您应该在之前编写单元测试
开始编写代码
有人真的这样做吗
方法论这似乎是个好主意
理论上的想法,但实际上是
是吗
您是否应该编写单元测试来查看您的方法如何处理错误/恶意输入?显然,您希望针对专门用于处理“用户”输入的函数编写测试,以查看它如何处理错误/恶意输入,但对于不应将此类输入传递给它们的函数又如何呢?你在哪一点划界
在上课前编写单元测试的方法被称为(TDD),并在
什么单元测试通常很难编写?为什么?我对不需要嘲笑的方法特别感兴趣
感谢单元测试困难的两种情况:
调用属于其他类的静态方法的方法,特别是当其他类具有静态状态或执行重要工作时。在尝试“单元”测试一个通过传递闭包进行数据库查询的方法时陷入了困境,这可能会让人觉得很糟糕
方法直接创建其他类的实例(即,通过new),特别是当其他类的构造函数本身不需要静态时,或者当它在构造器中做了重要的工作时。在Misko的广泛的
单击“缺陷x”链接(它们看起来像纯文本,但它们是独立的链接)。大型复杂方法,可以同时完成许多
尝试使用NUnit测试将对象添加到队列的方法,如果对象已排队,则会引发异常,但失败,因为queue.Contains()无法检测到模拟对象已在队列中
测试中的方法非常简单:
public void Enqueue(ISomeInterface obj) {
if (myQueue.Contains(obj)) {
throw new InvalidOperationException("Already queued");
}
myQueue.Enqueue
如何在TFS2010自动构建中为单元测试启用代码覆盖率
在Visual Studio 2010中,我们为测试项目启用了代码覆盖率(测试-->编辑测试设置-->本地测试设置-->启用代码覆盖率并选择要针对其运行代码覆盖率的程序集)
现在,当从Visual Studio 2010(测试-->运行-->解决方案中的所有测试)运行时,它工作正常(我们可以读取代码覆盖率)
问题是TFS 2010在构建时没有报告代码覆盖率
请注意,测试项目由构建控制器使用,但没有任何代码覆盖
对于我们来说,使代码覆盖率与单
我有一个单元测试,它使用TestInitialize方法中的.bak文件部署数据库。我正在使用dll(而不是VS)从mstest运行此测试,因此需要将.bak文件复制到mstest创建的卷影目录
我不想将[DeploymentItem]属性添加到每个测试方法中,我甚至不确定这是否可行,因为TestInitialize是使用此文件的方法
我是否可以在项目中放置一个标记,以确保在测试DLL上使用MSTest运行时.bak文件将被复制到卷影目录
谢谢请参见部署项目:
单元测试是否应包含在与测试代码相同的回购协议中?
或者他们应该在自己的回购协议中
我的对比思考:
一方面,测试代码不应该与生产代码位于同一棵树中;另一方面,单一回购协议应该是独立的。(虽然我承认我对DVCS总体来说还是比较陌生的,更确切地说,是Mercurial)。如果您有一组不同的文件紧密链接在一起(也就是说,您不能在不更改另一个文件的情况下更改一个文件),那么这两组文件属于同一个存储库
这样,相同的标签适用于两者,并且它们总是同步的
“生产代码”只是对开发生命周期中某个阶段的描述:请参阅。
几个月来,我一直在大量使用NHibernate,我发现它非常强大,但对我来说,这是一种有时会伤害你的工具。我遇到过很多情况,在映射、LINQ查询或任何使用我的实体的代码中相对简单的更改都会导致意外行为。我最“惊人的成功”是拥有读取操作,该操作执行了N+1删除和插入操作,这仅仅是因为我在代码中而不是在数据库中对组件集合进行排序
多亏了,我可以跟踪像这样的一些问题,但我觉得我不能确定在重构或小的需求更改之后,我的数据访问层是否仍能正确且高效地运行。在每次更改之后手动测试/分析它是一件痛苦的事情。我在
我有一系列的单元测试都需要与ApacheZooKeeper服务器进行对话。显然,如果我有一个模拟服务器连接的库(或者一个简单的方法来运行我自己的连接),那将是最优的,但据我所知,在这一点上不存在任何库,而且引擎盖下有足够多的活动部件,我不太愿意手动尝试
因此,到目前为止,我们的解决方案是在本地建立一个虚拟服务器,执行测试,然后在最后将其拆除。这种方法很有效,但据我所知,没有简单的方法可以让Surefire在整个测试运行中执行一次操作——充其量,我有@BeforeClass和@AfterClass
我被告知,对使用应用程序引擎服务(如数据存储或memcache)的代码运行单元测试的最佳解决方案是在子进程中运行开发服务器,但我不确定如何运行。有人成功地运行了这种测试,并且可以共享解决方案吗
Go的App Engine SDK使用Python dev_appserver 你应该看看Josh Marsh。我知道提问者想要建立一个测试平台,需要这样做,但我认为还有另一种方法值得一提
除了为GAE服务使用测试床之外,Go有趣的特性还提供了另一种可能性:编写应用程序时只需要具有您使用的接口(它们将是官
代码在不断进化,并且随着它的发展,如果不修剪,它也会衰退,在这方面有点像花园。修剪意味着重构,以使其满足其不断发展的目的
如果我们有一个良好的单元测试覆盖率,重构会更安全。
测试驱动开发迫使我们首先编写测试代码,然后再编写生产代码。因此,我们无法测试实现,因为没有任何实现。这使得重构生产代码变得更加容易
TDD周期是这样的:编写测试,测试失败,编写生产代码直到测试成功,重构代码
但就我所见,人们重构生产代码,而不是测试代码。随着测试代码的衰退,生产代码将变得陈旧,然后一切都会走下坡路。因此,我认
我有一个简短的问题:
/**
* Method a1
*
* @param p1 A parameter
* @param p2 A parameter
* @return The return value
*/
public double a1(double p1, double p2) {
return (p1 + p2) / 2;
}
@Test
public void testa1() {
assertEquals(0, a1(32.5
使用一个已建立的TDD框架,在那里我可以拥有一个测试套件,这将是一件好事,但我不知道如何在没有测试的情况下验证处理块的功能,这些测试与被测代码一样复杂。我如何在C++测试中生成参考信号来验证一个处理块,而测试不是一个自我实现的预言形式?
如果有人在这方面有经验,或者可以建议一些我可以阅读的方法,那就太好了。我做了一些类似的启发式检测,我们有很多捕获文件和一个框架,可以加载和注入它们进行测试。您是否有可能在文件中捕获参考信号并执行相同操作
至于我关于TDD的2美分,这是一种很好的开发方式,但是与大
我目前正在为一个相对较大的测试项目开发一个测试套件。这是flexmojos项目的测试工具。我在这里写下了testsuite的总体工作原理:
我现在的问题是,目前在构建的初始化阶段,很多东西都被复制到了测试本地repo中,但并不是所有列出的东西都会导致一个巨大的pom。构建被配置为首先查看我的主要本地repo,如果在那里找不到,则下载它。因此,当构建运行时,很多东西都是从远程repo加载的。不幸的是,每次执行testsuite时都会这样做
我想做的是,设置某种本地nexus/artifactory
好的。。。我正在处理一个dll,该dll管理一些配置的设置(这里的细节和推理不适用,我不会让您感到厌烦)。我有一个引用程序集的类,用于与此系统接口。这个类有一个Load()方法。当出现读取或验证错误时,我当前让它显示一个消息框。我觉得引用程序集不应该负责管理这个?还是我错了?目前,这在创建单元测试时造成了巨大的破坏,因此我正在考虑添加一个属性来抑制消息,但仍然允许抛出异常。我在另一篇帖子上读到,有人建议使用IoC和一个对话结果助手类。这个例子是用构造函数注入的。。。但这将再次把这一责任交给大会。
我需要将csv文件的内容导入数据库。我曾经
要使用ajax上传文件,请将其保存在本地服务器上,读取文件,将项目插入数据库,然后从服务器中删除文件
现在我想用单元测试来测试它。如何测试“Post”功能?如何为它“上传”csv文件?这听起来更像是集成测试,而不是单元测试。单元测试不在系统之间进行测试(例如上载文件时),只在同一系统上测试小块不同的逻辑
请查看以了解更多详细信息
此外,我强烈建议您在实现任何逻辑之前先编写测试。正如@m.edmonson所说,您必须存根外部实体,只需测试与Post操作相
我不熟悉单元测试,所以这可能是一个愚蠢的问题
Usinf mvc 4我有一个运行良好的视图
我宣布我的模型在顶部,一切都很好
然后,我将模型提取到一个单独的库中,并忘记更改其中一个视图上的模型声明,因此发生了崩溃
有没有办法进行单元测试
我不想这样做的网页标题的看法,因为这可能会改变动态
这是如何正常处理的,还是未经正常测试的?查看或。有很多教程以及如何开始。我通常为控制器中的每个方法添加一个非常简单的测试,以检查它是否返回有效的ActionResult
[TestMethod]
public
我可以成功地为控制器模拟资源,但我不确定如何为工厂模拟资源
beforeEach(inject(function ($injector) {
$scope = $injector.get('$scope');
$controller = $injector.get('$controller');
var $q = $injector.get('$q');
$controller('mycontroller', {
$q
下面是我的控制器类和相关方法,以及我的测试类和相关测试。当模拟方法$this->user->update()运行时,我得到了这个错误
Time: 1.08 seconds, Memory: 31.00Mb
There was 1 error:
1) UserControllerTest::testUpdateSuccess
ErrorException: Argument 1 passed to Mockery_818785360_User::update() must be of
the
我正在测试使用第三方PBKDF2类生成散列的代码。我在测试中模拟这个对象。此类将多次迭代作为参数,这会增加散列所需的时间。在模拟类中添加断言以检查传入的迭代次数是否正确是一个好主意,还是应该在它返回的伪哈希中添加一段数据,以便我的实际单元测试可以检查迭代计数?实际上,在模拟类中添加断言是一个好主意,虽然这不是大多数人所说的。这就是模拟对象的工作方式,它们应该返回被测试类需要的数据,并验证被测试类是否调用了正确的函数并发送了正确的信息
但是,不要自己手动模拟这些类,这将永远无法满足所有需要的情况。
我正在MVC 4应用程序上进行单元测试。下面是我想进行单元测试的方法之一:-
[HttpPost]
public ActionResult Index(ProductViewModel model)
{
if (model != null)
{
return PartialView("_ProductGrid", SearchProduct(model));
}
else
我有一个触发HTTP请求的服务。此请求使用$rootScope.config对象存储了我的基本url,但由于某些原因,当我使用$httpBackend时,$rootScope未正确加载
服务:
myAppServices.factory('Auth', function($rootScope, $http, $cookieStore){
return {
logout: function(success, error) {
$http.get($rootScope.
我在应用程序中使用MVVM体系结构和prism。以下是我用来设置IresourceManager的代码。请让我知道这种做法是好的还是应该使用依赖项注入,每次在构造函数中都将Resourcemanager作为参数传递给我
public SapUploadScriptInfo(XDocument scriptDoc) : this()
{
this.resourceManager = ServiceLocator.Current.GetInstance<IResourceManager
我在项目中使用了分层架构,如控制器->服务->DAO。我想为服务层编写JUnit测试用例。既然服务层将在内部调用DAO方法,为什么我要在DAO层经过内部测试时为其编写不同的测试用例呢
有人说我需要使用mockito来模拟DAO方法。真的需要吗?在测试服务层方法时,我不能直接使用原始代码吗?在我看来,您应该尽可能避免模拟。避免模拟的原因如下:
您必须确保您的模拟符合您模拟的DAO接口定义的契约
阅读模拟测试比阅读使用真实实现的简单单元测试要困难得多。因此,您的测试更可能包含错误本身或具有逻辑流。
我只想从HttPServletRequest中设置属性。下面是Jmockit的代码片段
new Expectations() {
private final Delegate requestAttributeDelegate = new Delegate() {
final Map<String, Object> attributes = new HashMap<String, Object>();
我目前正在使用FakeiTesy进行单元测试。我在假装NServiceBus。发送方法调用是在一个方法中进行的
我遇到的问题是,我在总线上用以下方法发送了两条消息:
bus.Send(new CommandOne(Id = [something]));
bus.Send(new CommandTwo(Id = [something]));
这两个命令都是通过相同的方法调用在伪造的总线上发送的(为了简单起见,我删除了真实的命令名和参数)
以下是我的NUnit代码/Fakeetisy代码的样子:
如果我使用被测类的多个方法创建一个单元测试,它仍然是一个单元测试吗?比如说,
@TestFixture
public class TestBehavior {
@Test
public void testA() {
// arrange
Model sut = new Model();
// act
string actual = sut.doA(5, sut.doB());
// assert
正如标题中提到的,我正在尝试测试我的域在发生错误后是否没有被持久化。正在测试的代码是:
//domain is created using mockDomain(DomainClass, [...])
domain.someField = newValue
domain.someProperty = invalidValue
if(!domain.hasErrors() && domain.save()) {
log.info "Saved."
} else {
我在我的项目中有量角器e2e测试,但是在运行e2e测试之前,我有一个向db插入数据的问题。怎么做?我有可以插入数据的java单元测试。有没有办法从量角器调用java单元测试
谢谢,您可以在量角器配置文件中定义函数:
// protractor.conf.js
exports.config = {
beforeLaunch: function() {
// You can do it here.
}
...
onPrepare: function() {
//
我目前正在使用此xml配置测试我的Symfony2项目,该配置运行良好:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
backupGlobals = "false"
backupStaticAttributes = "false"
colors = "true"
convertErrorsToExceptions
我即将开始学习斯波克,我正在尝试一些基本的东西。
我想检查文件的:exist()和getText()功能
因此,我编写了以下测试:
class MyTestSpec extends Specification {
def "test file"() {
given:
def mockFile = Mock(File,constructorArgs :["./doesNotExist.txt"])
mockFile.exists() >> tr
我必须在全球范围内安装Web组件测试仪(wct)吗?例如,npm安装-g web组件测试仪。有没有办法将其安装为本地模块?例如,npm安装web组件检测仪。如果是,我如何执行它?是的,您可以使用您提到的命令在本地安装web组件检测仪
要执行它,您可以运行/node\u modules/web组件测试仪/bin/wct
我正在努力让我的Angular2单元测试启动并运行。
我猜这与我的模块加载有关
这就是我得到的错误:
警告[web服务器]:404:
/base/public/dev/assets/lib/node_modules/angular2/src/platform/browser/browser_adapter.js
套接字上缺少错误处理程序。
TypeError:(msg | |“”)。替换不是一个函数
这是我的karma.config.js
module.exports = function(co
我有一个简单的angular2组件,定义如下。我想用karma和jasmine创建一个单元测试来运行这个组件
@Component({
selector: 'property',
template: require('./property.component.html'),
directives: [Panel],
providers: [ConfigService]});
export class PropertyComponent {
config:any;
constructor(co
我已经用angular cli创建了angular 2项目和服务,并尝试测试我的服务
但API在异步函数中不会失败,尽管它应该失败;此外,它只是忽略了这些例外情况
/* tslint:disable:no-unused-variable */
import {
beforeEach, beforeEachProviders, describe, xdescribe,
expect, it, xit, async, inject, injectAsync
} from '@angular
我编写的代码只是使用powermock模拟静态方法
在运行测试用例时,不会抛出对可用模拟的最后调用
在调试时,发现它是在expect语句期间抛出的
异常throwm的堆栈跟踪:
java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:466)
at org.easymock.EasyMock.expe
在我们的项目中,我们使用spring.net和nhibernate来持久化我们的域实体。Out Test Data Builder部分保留了实体,因此它们也在使用spring.net
我遇到了AutoFixture和AutoData,并尝试将其用于我们的测试,通过AutoData注入实体实例来减少单元测试的安排部分
[Test, BuilderAutoData]
public void TestAutoFixture(City city1, City city2, User user, User
如何在几个不同的项目上运行相同的Junit测试?
已知这些项目包含具有相同特性的相同类等
我希望避免将测试类复制到每个项目中
基本上我想在他们所有的项目上运行相同的测试(他们从一开始就得到了测试)。。。因此,学生1有一个a级项目,学生2有他/她的a级项目文件夹,我想在他们的两个项目上自动运行我的“ATester”。当然,最便宜的方法似乎只是在他们的所有项目中复制我的测试类,然后通过一些调用运行程序(或在shell脚本中)的java代码来运行它们。。。但我只是想知道是否有一个美丽的解决方案(我一直
我使用JUnit编写了基本单元测试,用于简单的方法,可以添加两个数字。我可以使用assert*函数调用族来验证结果。现在我想对Spring引导控制器进行单元测试
以下是单元测试类的示例-
public class MyJunitTest {
private MockMvc mockMvc;
@Mock
private MyService service;
@InjectMocks
private MyController controller;
@Before
public void
我构建了一个简单的Vue组件来包装Trix编辑器。我正在尝试为它编写测试,但Trix似乎没有正确安装,也没有像在浏览器中那样生成工具栏元素。我用的是Jest test runner
TrixEdit.vue
<template>
<div ref="trix">
<trix-editor></trix-editor>
</div>
</template>
<script>
import 'tri
我正在创建控制器单元测试,并试图通过远程验证以编程方式验证视图模型。内置和验证正确分配所有激发和返回,但不会执行远程验证
所有的验证都在表单post中工作。在单元测试中,我还需要做其他的事情吗
下面是我用来验证视图模型的代码:
public static void ValidateViewModel<TViewModel, TController>(this TController controller, TViewModel viewModelToValidate)
我正在使用graphene_django和graphql_jwt在django中实现用户类型和身份验证。以下是我的两个文件:代码和相应的测试位于名为“users”的文件夹中,该文件夹是应用程序级文件夹(但不是django应用程序)
schema.py
import graphene
from graphene_django import DjangoObjectType
from django.contrib.auth import get_user_model
class UserType(
我在理解单元测试的本质时遇到了一个问题——为什么我要编写它们呢。让我们考虑下面的代码:
public enum ObjectType
{
TypeA = 0,
TypeB = 1
}
public ObjectType Type;
public bool IsTypeB(ObjectType Type)
{
bool result = false;
If(Type = ObjectType.TypeB)
{
result = t
我已经开始在我的嵌入式项目中使用谷歌测试和谷歌模拟。
一切正常,但目前我在开发代码时在主机上使用它。它是TDD的最佳选择(速度很快),但我必须在目标板(STM32)上局部运行所有代码,因为在我的PC上,我在目标ARMclang上使用GCC。因此,我需要验证目标上的所有操作是否正常
下面是我关于谷歌测试的问题:
是否可以轻松地将所有调试消息(测试结果)重定向到std::ostream以外的其他外围设备,即UART或USB,以便将测试结果发送回主机
我想是的,但是有相当多的代码,我需要花费数周的时间
我想检查nextjs门户标记是否出现在我的页面主体中,如果出现,请单击它
我怎么能用柏树做呢
这是可行的,但我现在需要if块:
cy.get('nextjs-portal').click();
差不多
if (cy.get('nextjs-portal')) {
cy.get('nextjs-portal').click();
}
如果在这里,你不需要。如果元素不存在,cy.get('nextjs-portal')将超时,不会发生单击
如果您真的需要条件测试,可以这样做,但这通常是一种反
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 317 页