javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

iteration

std

c++-faq

git-checkout

generator

coroutine

spring-mvc

reflection

javascript-objects

html5

单元测试-在J中模拟静态块

我对Java的座右铭是“仅仅因为Java具有静态块,并不意味着您应该使用它们。” 除了笑话,Java中有许多技巧使测试成为噩梦。 我最讨厌的两个是匿名类和静态块。 我们有很多使用静态块的遗留代码,这些是我们编写单元测试时最讨厌的点之一。 我们的目标是能够以最小的代码更改为依赖于此静态初始化的类编写单元测试。

到目前为止,我对我的同事的建议是将静态块的主体移到专用的静态方法中,并将其称为staticInit。然后可以从静态块中调用此方法。 对于单元测试,依赖于该类的另一个类可以轻松地使用JMockit模拟DependentClassTest,而不执行任何操作。 让我们在示例中看一下。

public class ClassWithStaticInit {
  static {
    System.out.println("static initializer.");
  }
}

将更改为

public class ClassWithStaticInit {
  static {
    staticInit();
  }

  private static void staticInit() {
    System.out.println("static initialized.");
  }
}

这样我们就可以在JUnit中执行以下操作。

public class DependentClassTest {
  public static class MockClassWithStaticInit {
    public static void staticInit() {
    }
  }

  @BeforeClass
  public static void setUpBeforeClass() {
    Mockit.redefineMethods(ClassWithStaticInit.class, MockClassWithStaticInit.class);
  }
}

但是,该解决方案也有其自身的问题。 您不能在同一JVM上运行DependentClassTestClassWithStaticInitTest,因为您实际上希望静态块为ClassWithStaticInitTest运行。

您将如何完成此任务? 还是您认为更好的,非基于JMockit的解决方案更干净?

trans by 2020-08-06T23:00:40Z

从单元测试中获取发送到Console.Out的输出?

我正在使用NUnit在C#中构建单元测试,我想测试主程序根据命令行参数实际输出正确的输出。

NUnit测试方法中有没有一种方法可以调用Program.Main(...)来捕获写入Console.Out和Console.Error的所有内容,以便我可以对其进行验证?

trans by 2020-08-06T22:50:56Z

TCP-用于单元测试的有效无效IP地址是什么?

我正在为客户端库编写单元测试。 我想测试使用无效端口和无效IP的连接。 什么是可能无法路由到某个地方的好IP地址? 我不想对运行单元测试的计算机所在的网络进行任何假设。 LOCALHOST似乎是一个错误的选择,因为那是运行服务器组件的有效机器,我想分别测试无效的端口。 IPv4规范中某处是否保留有INVALID-IP?

trans by 2020-08-06T13:24:12Z

使用Pydev进行连续单元测试(Python和Eclipse)

有没有一种方法可以将后台单元测试与Pydev Eclipse环境集成在一起?

我的单元测试运行良好,但是我想基于源文件更改(例如,带有鼻子)将它们集成到后台运行,并将结果集成回Eclipse(当控制台失败时,我认为是红色的大X) 和跟踪日志视图)。

不,一侧的命令提示行进鼻子不计算在内。

开发RoR东西时,我已经进行了Eclipse集成。

谢谢,

塔尔

编辑:检出新的Pydev(1.6.4)[http://pydev.org/manual_adv_pyunit.html]

trans by 2020-08-06T12:39:24Z

Android单元测试未嘲笑

我遵循了本指南[https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support]但我坚持这个错误:

junit.framework.AssertionFailedError: Exception in constructor: testSaveJson (java.lang.RuntimeException: Method put in org.json.JSONObject not mocked. See https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support for details.

我按照指南的说明通过Gradle构建进行了修改,但这没有什么不同

 testOptions { 
    unitTests.returnDefaultValues = true
  }
trans by 2020-08-06T10:16:27Z

单元测试-PHP中的测试驱动开发

我是使用PHP的网络开发人员。 我在C#桌面应用程序中使用“测试驱动开发”的经验有限。 在那种情况下,我们将nUnit用于单元测试框架。

我想开始在新项目中使用TDD,但我真的不确定从哪里开始。

您对基于PHP的单元测试框架有什么建议?对于TDD概念的新手,有哪些好的资源?

trans by 2020-08-06T00:15:44Z

如何使用googletest捕获stdout / stderr?

使用googletest框架时是否可以捕获stdout和stderr?

例如,我想调用一个将错误写入控制台的函数(stderr)。现在,在测试中调用该函数时,我想断言那里没有输出。

或者,也许我想测试错误行为并想断言当我(故意)产生错误时打印了某个字符串。

trans by 2020-08-05T19:21:33Z

asp.net mvc-ASP / NET MVC:带有/会话的测试控制器? 嘲笑吗

我在这里重新阅读了一些答案:测试视图和控制器以及模拟,但是我仍然不知道如何测试一个读取并设置Session值(或任何其他基于上下文的变量)的ASP.NET MVC控制器。如何为我的测试方法提供(会话)上下文? 在嘲笑答案吗? 有人有例子吗?基本上,我想在调用controller方法并使控制器使用该会话之前伪造一个会话。 有任何想法吗?

trans by 2020-08-05T11:27:29Z

单元测试-如何确认我正在使用的Jasmine版本?

如果我记得在Jasmine中有一个命令可以将我正在运行的Jasmine的确切版本记录到控制台上,但是我不记得它是什么了。 我很肯定我以前在某处已经看到过这个,现在我真的需要它了,我在任何地方都找不到。 有谁知道它是什么?


编辑:使用jasmine.getEnv().versionString()的发布解决方案不起作用-对于阅读此内容的任何mod来说,解决该问题会更好地作为一个新问题开始,还是在这里继续?

trans by 2020-08-05T07:54:54Z

javascript-单元测试时,无法解析Angular RC 5中Router:(?,?,?,?,?,?,?)的所有参数

我刚刚升级到Angular RC 5,现在当我尝试进行单元测试时,所有使用'ROUTER_DIRECTIVES'的组件都会失败,并显示'无法解析路由器的所有参数:(?,?,?,?,?,?,?)' 组件。

import { inject, addProviders } from '@angular/core/testing';
import { ComponentFixture, TestComponentBuilder } from '@angular/core/testing';
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES, Router } from '@angular/router';

import { HomeComponent } from './home.component';
import { UserService } from '../_services/user.service';

describe('Component: Home', () => {

  beforeEach(() => {
    addProviders([HomeComponent, UserService, ROUTER_DIRECTIVES, Router]);
  });  

  it('should inject the component', inject([HomeComponent, UserService, ROUTER_DIRECTIVES, Router],
    (component: HomeComponent) => {
      expect(component).toBeTruthy();
      // expect(component.currentUser.firstname).toEqual('Jan');
    }));

完整的错误日志:

     Chrome 52.0.2743 (Windows 10 0.0.0)
   Error: Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?).
       at new BaseException (webpack:///C:/ng/anbud/~/@angular/compiler/src/facade/exceptions.js:27:0 <- src/test.ts:2943:23)
       at CompileMetadataResolver.getDependenciesMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:551:0 <- src/test.ts:24542:19)
       at CompileMetadataResolver.getTypeMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:448:0 <- src/test.ts:24439:26)
       at webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:594:0 <- src/test.ts:24585:41
       at Array.forEach (native)
       at CompileMetadataResolver.getProvidersMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:575:0 <- src/test.ts:24566:19)
       at CompileMetadataResolver.getNgModuleMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:305:0 <- src/test.ts:24296:58)
       at RuntimeCompiler._compileComponents (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:150:0 <- src/test.ts:37986:47)
       at RuntimeCompiler._compileModuleAndAllComponents (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:78:0 <- src/test.ts:37914:37)
       at RuntimeCompiler.compileModuleAndAllComponentsSync (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:52:0 <- src/test.ts:37888:21)

有什么想法如何通过布线对组件进行单元测试吗?

trans by 2020-08-04T23:48:31Z

单元测试-开始TDD-挑战? 解决方案? 建议?

好的,我知道已经开始使用TDD了。.但是,我想我知道一般的共识是这样做,但是,在进入游戏领域时似乎存在以下问题:

  • 在处理集合时,即使基于仿制药等我们“知道”其正常工作的情况下,是否仍会测试明显的添加/删除/插入是否成功?
  • 有些测试似乎要花很长时间才能实现。例如,在处理字符串输出时,是否有“更好”的方式来进行此类操作? (例如,在解析之前测试对象模型,将解析分解为小操作并在其中进行测试)在我看来,您应该始终测试“最终结果”,但这可能千差万别,并且设置起来很繁琐。
  • 我没有可用的测试框架(工作不会花钱),所以我可以“练习”更多。 有没有可以免费用于商业用途的优质产品? (目前我正在使用良好的'ol Debug.Assert :)
  • 可能是最大的。。有时我不知道不会发生什么。 代码,或者将其保留,然后等待所有失败(这将花费更多)。

因此,基本上我在这里寻找的不是“随便做”,而是更多“我这样做了,遇到了问题,并通过此方法解决了。”。个人经历:)

trans by 2020-08-03T21:33:34Z

javascript-如何使用茉莉花测试具有setTimeout的函数?

我需要为内部有jasmine.Clock.useMock();调用的函数编写测试,但是我找不到应该怎么做。

这是功能

// Disables all submit buttons after a submit button is pressed.
var block_all_submit_and_ajax = function( el ) {
    // Clone the clicked button, we need to know what button has been clicked so that we can react accordingly
    var $clone = $( el ).clone();
    // Change the type to hidden
    $clone.attr( 'type', 'hidden' );
    // Put the hidden button in the DOM
    $( el ).after( $clone );
    // Disable all submit button. I use setTimeout otherwise this doesn't work in chrome.
    setTimeout(function() {
         $( '#facebook input[type=submit]' ).prop( 'disabled', true );
     }, 10);
    // unbind all click handler from ajax
    $( '#facebook a.btn' ).unbind( "click" );
    // Disable all AJAX buttons.
    $( '#facebook a.btn' ).click( function( e ) {
        e.preventDefault();
        e.stopImmediatePropagation();
    } );
};

这是我的考验

it( "Disable all submit buttons", function() {
    // Get a button
    var $button = $( '#ai1ec_subscribe_users' );
    // Call the function
    utility_functions.block_all_submit_and_ajax( $button.get(0) );
    // check that all submit are disabled
    $( '#facebook input[type=submit]' ).each( function( i, el ) {
        console.log( 'f' );
        expect( el ).toHaveProp( 'disabled', true );
    } );
} );

我尝试使用jasmine.Clock.useMock();jasmine.Clock.tick(11);,但我无法正常工作,测试从未通过

trans by 2020-08-03T18:41:10Z

功能隐私和单元测试具有

您如何处理Haskell中的功能可见性和单元测试?

如果在模块中导出每个函数,以便单元测试可以访问它们,则可能会冒其他人调用不应在公共API中使用的函数的风险。

我想到使用{-# LANGUAGE CPP #-},然后用#ifdef围绕出口:

{-# LANGUAGE CPP #-}

module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where

有没有更好的办法?

trans by 2020-08-03T10:10:38Z

单元测试中如何比较两个对象?

public class Student
{
    public string Name { get; set; }
    public int ID { get; set; }
}

...

var st1 = new Student
{
    ID = 20,
    Name = "ligaoren",
};

var st2 = new Student
{
    ID = 20,
    Name = "ligaoren",
};

Assert.AreEqual<Student>(st1, st2);// How to Compare two object in Unit test?

如何在单元测试中比较两个集合?

trans by 2020-08-02T15:35:55Z

PHP-单元测试和静态方法

阅读并学习单元测试,尝试理解下面的文章,该文章解释了静态函数调用的困难。

我不清楚这个问题。 我一直认为静态函数是在类中汇总实用程序函数的一种好方法。 例如,我经常使用静态函数调用进行初始化,即:

Init::loadConfig('settings.php');
Init::setErrorHandler(APP_MODE); 
Init::loggingMode(APP_MODE);

// start loading app related objects ..
$app = new App();

//阅读这篇文章后,我现在的目标是...

$init = new Init();
$init->loadConfig('settings.php');
$init->loggingMode(APP_MODE);
 // etc ...

但是,我为此课程编写的几十个测试是相同的。 我什么也没改变,他们仍然都过去了。 难道我做错了什么?

该帖子的作者指出:

静态方法的基本问题是它们是过程代码。 我不知道如何对程序代码进行单元测试。 单元测试假设我可以孤立地实例化我的应用程序的一部分。 在实例化过程中,我将依赖关系与模拟/友好关系连接起来,以替换实际的依赖关系。 使用过程编程时,由于没有对象,因此代码和数据是分开的,因此无需“连线”。

现在,我从帖子中了解到静态方法会创建依赖关系,但无法直观地理解为什么人们无法像常规方法那样轻松地测试静态方法的返回值?

我将避免使用静态方法,但如果有的话,我希望有一个WHEN静态方法有用的想法。 从这篇文章看来,静态方法与全局变量一样邪恶,应尽可能避免使用。

任何有关该主题的其他信息或链接将不胜感激。

trans by 2020-08-02T02:33:19Z

单元测试-Java中的模拟对象是什么?

我想知道Java中有什么模拟对象。 我们为什么要创建它们,它们的用途是什么?

trans by 2020-08-01T15:44:49Z

单元测试-在弹簧测试上禁用@EnableScheduling

当我运行单元测试时,它会调用我的计划任务。 我想防止这种行为,这是由于我的主应用程序配置中包含@EnableScheduling而引起的。

如何在单元测试中禁用此功能?

我遇到了这个建议设置个人资料的问题/答案。

不知道我该怎么做? 还是过度杀伤力? 我当时在考虑为我的单元测试使用一个单独的AppConfiguration,但是当我这样做时,我感觉好像重复了两次代码吗?

@Configuration
@EnableJpaRepositories(AppConfiguration.DAO_PACKAGE)
@EnableTransactionManagement
@EnableScheduling
@ComponentScan({AppConfiguration.SERVICE_PACKAGE,
                AppConfiguration.DAO_PACKAGE,
                AppConfiguration.CLIENT_PACKAGE,
                AppConfiguration.SCHEDULE_PACKAGE})
public class AppConfiguration {

    static final    String MAIN_PACKAGE             = "com.etc.app-name";
    static final    String DAO_PACKAGE              = "com.etc.app-name.dao";
    private static  final  String ENTITIES_PACKAGE  = "com.etc.app-name.entity";
    static final    String SERVICE_PACKAGE          = "com.etc.app-name.service";
    static final    String CLIENT_PACKAGE           = "com.etc.app-name.client";
    static final    String SCHEDULE_PACKAGE         = "com.etc.app-name.scheduling";


    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
       // stripped code for question readability
    }

    // more app config code below etc

}

单元测试示例。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={AppConfiguration.class})
@Transactional
@TransactionConfiguration(defaultRollback = true)
@WebAppConfiguration
public class ExampleDaoTest {

    @Autowired
    ExampleDao exampleDao;

    @Test
    public void testExampleDao() {
        List<Example> items = exampleDao.findAll();
        Assert.assertTrue(items.size()>0);
    }
}
trans by 2020-08-01T10:36:56Z

C#-模拟新的Microsoft Entity Framework Identity UserManager和RoleManag

有没有人为UserManagerRoleManager提出成功的模拟解决方案? 我整天都在撞墙。 我要做的就是模拟对象以使用内存中的集合,而不是访问Entity Framework数据存储。 我搜寻了互联网,并尝试了使用最小起订量的几种不同方法。

我的印象是,新东西更容易测试。 我想念什么吗?

trans by 2020-07-31T23:30:21Z

测试:如何在不损失速度的情况下专注于行为而不是实现?

看来,有两种完全不同的测试方法,我想引用两种方法。

问题是,这些意见是在5年前(2007年)提出的,我很感兴趣,自那以后发生了什么变化,我应该走哪条路。

布兰登守护者:

从理论上讲,测试应该是不可知的 实施。 这导致较少的脆性测试,而实际测试 结果(或行为)。

使用RSpec,我觉得完全嘲笑您的通用方法 测试您的控制器的模型最终迫使您看起来太多 进入您的控制器的实现。

这本身还不错,但问题是它也可以凝视 控制器中有很多指令来决定如何使用模型。 为什么呢 如果我的控制器叫Thing.new怎么办? 如果我的控制器决定怎么办 拿来Thing.create! 和救援路线? 如果我的模型有一个 特殊的初始化方法,例如Thing.build_with_foo? 我的规格 如果我更改实现,行为就不会失败。

当您嵌套资源并在 每个控制器创建多个模型。 我的一些设置方法结束了 长达15行或更多行且非常脆弱。

RSpec的目的是将您的控制器逻辑与 您的模型,理论上听起来不错,但几乎与 用于集成堆栈(如Rails)的颗粒。 特别是如果你练习 瘦控制器/脂肪模型学科, 控制器变得非常小,设置也变得巨大。

那么想做BDD是什么呢? 退后一步,我的行为 真正要测试的不是我的控制器调用Thing.new,而是 给定参数X,它会创建一个新事物并重定向到它。

大卫·切利姆斯基(David Chelimsky):

这都是权衡取舍。

AR选择继承而不是委托的事实使我们陷入困境 测试绑定–我们必须耦合到数据库,否则我们必须 与实施更亲密。 我们接受这种设计选择 因为我们可以从表现力和干燥感中受益。

为了解决这个难题,我选择了更快的测试,但付出了代价 稍脆。 您选择了较少的脆性测试,但要付出代价 它们中的运行速度稍慢。 无论哪种方式都需要权衡。

在实践中,我进行了数百次(即使不是数千次)测试 一天(我使用自动测试并采取非常细致的步骤),然后更改是否 我几乎从不使用“新”或“创建”。 同样由于细粒度的步骤,新 起初出现的模型非常不稳定。 valid_thing_attrs 方法可以最大程度地减少这种痛苦,但这仍然意味着 每个新的必填字段都意味着我必须进行更改 valid_thing_attrs。

但是,如果您的方法在实践中对您有用,那么它很好! 在 事实上,我强烈建议您发布带有生成器的插件 以您喜欢的方式生成示例。 我肯定很多 的人将从中受益。

瑞安·贝茨(Ryan Bates):

出于好奇,您在测试/规格中多久使用一次模拟? 也许我做错了,但是我发现它很严重 限制。自一个多月前改用rSpec以来,我一直在 他们在文档中推荐的控制器和视图层的内容 完全不打数据库,模型完全被嘲笑 出来。这可以使您获得不错的速度提升,并使某些事情变得容易, 但是我发现这样做的弊端远远超过了优点。以来 使用模拟程序,我的规格变成了维护噩梦。眼镜 用于测试行为,而不是执行。我不在乎 如果一个方法被调用,我只想确保结果输出 是正确的。因为嘲笑使规范挑剔 实施,它可以进行简单的重构(不会改变 行为),而不必经常回去 “修复”规格。我对规格/测试应有的看法很坚决 盖。测试仅在应用程序中断时才会中断。这是一 我之所以很难测试视图层的原因是因为我发现它太僵硬了。 通常会导致测试中断而应用程序在以下情况下不会中断 改变视图中的小事情。我在发现同样的问题 模拟。最重要的是,我今天才意识到,模拟/存根 一个类方法(有时)在规范之间徘徊。规格应 自我约束,不受其他规格的影响。这打破了 规则并导致棘手的错误。我从这一切中学到了什么?是 小心在哪里使用嘲笑。存根还不算坏,但仍然有 一些相同的问题。

我花了过去几个小时,从规格中删除了几乎所有模拟。 我还合并了控制器,并使用 控制器规格中的“ integrate_views”。 我也正在加载所有 每个控制器规格的固定装置,因此需要填充一些测试数据 观点。 最终结果? 我的规格更短,更简单,更多 一致,不那么僵化,并且它们一起测试整个堆栈 (模型,视图,控制器),因此不会有任何漏洞通过裂缝。 我是 并不是说这是每个人的“正确”方法。 如果你的项目 需要非常严格的规范情况,那么可能不适合您,但是在我 情况下,这比我之前使用模拟游戏要好得多。 我仍然 认为存根是一个很好的解决方案,所以我仍然在做 那。

trans by 2020-07-31T21:16:09Z

单元测试-用moq模拟虚拟只读属性

尽管可以手动完成,但我找不到方法,所以为什么不使用最小起订量呢?

trans by 2020-07-29T00:49:10Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共27页