我正在使用本教程伪造我的DbContext并测试:http://refactorthis.wordpress.com/2011/05/31/mock-faking-dbcontext-in-entity-framework-4-1-with-a-generic -repository /
但我必须更改FakeMainModuleContext实现以在我的控制器中使用:
public class FakeQuestiona2011Context : IQuestiona2011Context
{
private IDbSet<Credencial> _credencial;
private IDbSet<Perfil> _perfil;
private IDbSet<Apurador> _apurador;
private IDbSet<Entrevistado> _entrevistado;
private IDbSet<Setor> _setor;
private IDbSet<Secretaria> _secretaria;
private IDbSet<Pesquisa> _pesquisa;
private IDbSet<Pergunta> _pergunta;
private IDbSet<Resposta> _resposta;
public IDbSet<Credencial> Credencial { get { return _credencial ?? (_credencial = new FakeDbSet<Credencial>()); } set { } }
public IDbSet<Perfil> Perfil { get { return _perfil ?? (_perfil = new FakeDbSet<Perfil>()); } set { } }
public IDbSet<Apurador> Apurador { get …Run Code Online (Sandbox Code Playgroud) 我们的产品解决方案拥有100多个项目(500 + ksloc的生产代码).其中大多数是C#项目,但我们也很少使用C++/CLI来桥接与本机代码的通信.
重建整个解决方案需要几分钟时间.没关系.如果我想重建解决方案,我希望它真的需要一些时间.什么不好是完全重建后构建解决方案所需的时间.想象一下,我使用了完全重建,现在没有对解决方案进行任何更改,我按下Build(F6或Ctrl + Shift + B).如果没有变化,为什么需要35秒?在输出中我看到它开始"构建"每个项目 - 它不执行真正的构建,但它做了一些消耗大量时间的东西.
35秒的延迟是痛苦的屁股.是的我可以通过不使用构建解决方案来改善时间,但只能构建项目(Shift + F6).如果我在特定的测试项目上运行构建项目,我正在进行它将只需"8".它要求我在正确的项目上运行项目构建(测试项目以确保构建依赖测试的代码).至少ReSharper测试运行器正确识别只有这个单个项目必须构建并且重新运行测试通常只包含8 + s编译.我目前的编码Kata是:不要触摸Ctrl + Shift + B.
即使我没有做任何更改,测试项目构建也需要8秒.它需要8s的原因是因为它还"构建"依赖关系=在我的情况下它"构建"超过20个项目,但我只对单元测试或单个依赖进行了更改!我不希望它触及其他项目.
有没有办法简单地告诉VS只构建进行了一些更改的项目和依赖于已更改项目的项目(最好是这部分作为另一个构建选项)?我担心你会告诉我这正是VS正在做的事情,但是以MS的方式......
我想提高我的TDD经验并减少编译时间(在TDD中,编译可以每分钟发生两次).
为了让这更令人沮丧,我正在一个团队工作,大多数开发人员在加入这个项目之前曾经在这个团队工作过.所以你可以想象当他们必须使用VS而不是Java中的完全增量编译时他们会生气.我不需要增量编译类.我期待逐步编译解决方案.特别是在像VS 2010 Ultimate这样的产品中花费数千美元.
我真的不想得到如下答案:
我可以在这里阅读这些答案.那些是不可接受的解决方案 我们不会为VS做出这样的妥协付出代价.
除了我之外,我在我的应用程序中实现了100%的测试覆盖率urls.py.您对我如何为我的网址编写有意义的单元测试有什么建议吗?
FWIW这个问题出现了,因为我正在尝试测试驱动开发,并希望在编写代码来修复它们之前进行失败的测试.
我正在使用shanselmann的MvcMockHelper类来使用Moq模拟一些HttpContext的东西,但我遇到的问题是能够在我的MVC控制器中为我的模拟会话对象分配一些东西,然后能够在我的单元测试中读取相同的值以进行验证目的.
我的问题是如何将存储集合分配给模拟的会话对象,以允许诸如session ["UserName"] ="foo"之类的代码保留"foo"值并使其在单元测试中可用.
考虑这个课程:
public class Content
{
public virtual bool IsCheckedOut {get; private set;}
public virtual void CheckOut()
{
IsCheckedOut = true;
}
public virtual void CheckIn()
{
//Do Nothing for now as demonstrating false positive test.
}
}
Run Code Online (Sandbox Code Playgroud)
Checkin方法故意为空.现在我有一些测试方法来验证调用每个方法的状态.
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
Content c = new Content();
c.CheckOut();
Assert.AreEqual(true, c.IsCheckedOut); //Test works as expected
}
[TestMethod]
public void CheckInSetsCheckedOutStatusToFalse()
{
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //Test does not work as expected
}
Run Code Online (Sandbox Code Playgroud)
第二次测试通过了错误的原因.那么我如何使用mocking(moq)来验证CheckIn是否设置了IsCheckedOut属性?
谢谢.
编辑
澄清一下:我有一个名为CheckIn()的方法,其工作是将IsCheckedOut状态设置为false. …
我在制作Android应用程序方面有丰富的经验.对于我的新项目,我们决定进行测试驱动开发(TDD).我一直在使用Robotium进行用户场景测试,它工作正常,看起来也很简单.
对于单元测试,我尝试使用(MockContext Android Class)模拟Context,但我无法这样做.我浏览了这个博客http://sites.google.com/site/androiddevtesting/并通过这个http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html,这表明Android应用程序中的模拟仍然非常有限且很难,并建议使用PowerMock,jMockit,JeasyTest或Roboelectric(与Mockito和Maven结合使用)甚至是RoboGuice.
我想得到你们的任何建议,你认为哪个单元测试框架最适合测试Android应用程序.(特别是测试Android类,可能会提供模拟上下文和其他模拟功能,以便我可以使我的测试用例尽可能独立).任何建议或指示都会有所帮助.谢谢
在使用JavaScript开发UI时,我在尝试提供正确遵循TDD原则的最佳方法时遇到了很多麻烦.最好的方法是什么?
是否最好将视觉与功能分开?您是先开发可视元素,然后编写测试然后编写功能代码吗?
我经常遇到这个问题,我不知道如何克服这个障碍.我真的想开始学习和应用测试驱动开发(或BDD,或其他),但似乎我想要应用的每个应用程序,它几乎只是标准的数据库CRUD的东西,我不知道如何去应用它.除了被持久化到数据库之外,这些对象几乎不做任何事情; 没有需要测试的复杂逻辑.有一个网关,我最终需要测试第三方服务,但我想首先完成应用程序的核心.
每当我尝试编写测试时,我最终只会测试我可能不应该首先测试的基本内容(例如getter/setter),但它看起来不像对象有其他任何东西.我想我可以测试持久性,但这对我来说似乎永远不对,因为你不应该真的打到数据库,但如果你把它嘲笑,那么你真的没有测试任何东西,因为你控制了吐回来的数据; 就像我已经看到很多例子,其中有一个模拟存储库,通过循环和创建已知值列表来模拟数据库,并且测试验证"存储库"可以撤回某个值......我是没有看到这样的测试点,因为"存储库"当然会返回该值; 它在课堂上硬编码!好吧,我从纯TDD的角度看待它(也就是说你需要测试一下你的存储库需要一个GetCustomerByName方法或其他什么才能编写方法本身),但这看起来好像遵循了教条,除了它的"方式" - 除了证明方法合理之外,测试似乎没有做任何有用的事情.
我想错了吗?
例如,运行一次轧机联系管理应用程序.我们有联系人,让我们说我们可以向联系人发送消息.因此,我们有两个实体:Contact和Message每个实体具有共同的属性(例如,名字,姓氏,联系电子邮件,主题和正文以及消息的日期).如果这些对象都没有任何实际行为或需要执行任何逻辑,那么在设计这样的应用程序时如何应用TDD?该应用程序的唯一目的基本上是拉出联系人列表并在页面上显示它们,显示表单以发送消息等.我在这里没有看到任何有用的测试 - 我可以想到一些测试,但它们几乎是为了说"看,我有测试!"的测试.而不是实际测试某种逻辑(虽然Ruby on Rails很好地利用它,我并不认为测试验证是一个"有用的"测试,因为它应该是框架为你照顾的东西)
您认为在大型.net应用程序中管理单元测试的最佳方法是什么?是否更好地为解决方案中的每个单独项目添加测试项目,或者为其余项目中的所有测试添加一个大型测试项目?
例如,如果解决方案中有10个项目,那么有10个额外的测试项目或者一个大型测试项目是否足以满足整个解决方案的需要?
我知道模块化测试组件有一些好处,但使用测试类别可以实现非常相似的功能.许多项目的编译需要更长的时间,但您可以排除当时不需要的项目,而如果您只有一个项目,则无法执行此操作,但编译所需的时间会少一些.
请在答案中概述每个选项的优缺点.
我刚刚开始为我的AngularJS应用程序编写测试,我在Jasmine中这样做.
以下是相关的代码段
ClientController:
'use strict';
adminConsoleApp.controller('ClientController',
function ClientController($scope, Client) {
//Get list of clients
$scope.clients = Client.query(function () {
//preselect first client in array
$scope.selected.client = $scope.clients[0];
});
//necessary for data-binding so that it is accessible in child scopes.
$scope.selected = {};
//Current page
$scope.currentPage = 'start.html';
//For Client nav bar
$scope.clientNavItems = [
{destination: 'features.html', title: 'Features'},
];
//Set current page
$scope.setCurrent = function (title, destination) {
if (destination !== '') {
$scope.currentPage = destination;
}
};
//Return path …Run Code Online (Sandbox Code Playgroud) tdd ×10
unit-testing ×6
.net ×4
c# ×3
asp.net-mvc ×2
javascript ×2
mocking ×2
moq ×2
android ×1
angularjs ×1
build ×1
django ×1
django-urls ×1
frameworks ×1
jasmine ×1
nunit ×1