如果你有 100% 的测试覆盖率并且所有测试都通过,这是否意味着代码保证是正确的并且编写更多的测试是没有意义的?
您是否在Rails测试中使用factory_girl或machinist进行存根/模拟?
我是DDD(领域驱动设计)的新手,我喜欢它的很多想法.但是使用DDD,我需要花费大量时间分析域,定义实体和值对象,选择聚合并定义它们的边界等等.所以我想知道 - 它不是回归到BDUF(Big Design Up Front)吗?将DDD和敏捷放在一起有一些很好的经验吗?
我的项目总体代码覆盖率为72.86%,其中106个测试用例失败,1个跳过测试用例,925个测试用例通过.共有1032个测试用例.覆盖范围内有4个子覆盖范围:
我只知道testbusinesslogic.dll,并让测试通过.我不知道其余的(Business.dll/datalogic.dll/dataobject.dll),因为我无法调试该方法.
这是我第一次做TDD.
下面是datalogic.dll文件中的1个方法,此方法不会出现在我的失败/传递/跳过的测试用例中.这意味着什么?为什么这部分的代码覆盖率会如此之低?如何增加datalogic.dll部分的代码覆盖率?因为我没有失败的测试用例允许我像testbusinesslogic.dll一样通过它
public void GetModelDataForCreate(DataSet availabilityDataSet, int resourceID)
{
Database db = WindowsApplicationTemplate.ApplicationDatabase.DatabaseFactory.CreateDatabase();
string sqlProcedure = "uspAvailabilityGetModelDataForCreate";
DbCommand dbCommand = db.GetStoredProcCommand(sqlProcedure);
UtilityDL.SetCommandTimeout(dbCommand);
db.AddInParameter(dbCommand, "resourceID", DbType.Int32, resourceID);
string[] tables = new string[] { "EventType", "LaborCategory", "Event", "IntelTime", "DurationType", "Resource", "ParameterInfo" };
availabilityDataSet.Clear();
// RETRIEVE DATA FROM DB AND LOAD INTO DATASET
db.LoadDataSet(dbCommand, availabilityDataSet, tables);
}
Run Code Online (Sandbox Code Playgroud) TDD。我有相当复杂的编码练习,如果私有方法非常复杂,我是否要测试它们?
所以我的类只公开了一个公共方法,但包含很少的非常复杂的方法,我认为应该测试哪些方法?
有疑问:我是否测试它们?
我正在尝试使用C#进行一些简单的测试驱动开发测试.但是我没有真正的经验,我遇到了一些麻烦.
我正在尝试执行的测试是用于登录身份验证.以下是我到目前为止的情况.
using System;
namespace TimetableSystem
{
public class Timetable
{
public bool TimetableLogin(string username, string password)
{
throw new NotImplementedException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试方法
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TimetableSystem;
namespace TimetableSystemTests
{
[TestClass]
public void TestLoginMethodValid()
{
Timetable auth = new Timetable();
bool result = auth.TimetableLogin("Name", "Password");
Assert.IsTrue(result);
}
}
Run Code Online (Sandbox Code Playgroud)
这个测试一直在失败,我不确定为什么感谢任何帮助.
是否可以测试一个返回 void 的函数,并且只向控制台写入一行,如下所示使用FluentAssertion?
static void WriteLine()
{
Console.WriteLine("It works!");
}
Run Code Online (Sandbox Code Playgroud) 我收到此错误:
\n\n\n调用未定义的方法 Tests\\Feature\\ExampleTest::visit()
\n
在运行我的测试用例时。我对 TDD 有点陌生。
\n这是我的示例测试代码
\n<?php\n\nnamespace Tests\\Feature;\n\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\nuse Tests\\TestCase;\n\nclass ExampleTest extends TestCase\n{\n\n /**\n * A basic test example.\n *\n * @return void\n */\n\n public function test_example()\n {\n $response = $this->visit('/')->see('Laravel');\n $response->assertStatus(200);\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n从我用来了解 TDD 的视频教程中,上面的代码运行良好,没有任何问题,但是当我在我这边运行代码时,我遇到了如下错误:
\n\n\n\xe2\x80\xa2 Tests\\Feature\\ExampleTest > 示例\n错误
\n调用未定义的方法 Tests\\Feature\\ExampleTest::visit()
\n
我目前正在跑步Laravel 8.6并且PHPUnit 9.510
任何关于如何解决这个问题的想法都受到高度欢迎。
\n(这不是调查TDD优点的问题.还有其他地方可以进行此类讨论.提前致谢.)
我一直在遇到太多开发人员,他们都是技术新手,他们也报告了对测试驱动开发和NUnit的不满.
我听到负面评论,如:
" 我不喜欢NUnit. 我在一年前尝试过它,但是我忘记了如何使用它.让我们只使用这个Windows Form应用程序,我刚刚将其作为测试工具编写而成.测试代码无论如何都是一次性代码,什么是差异?无论如何,过去我的方式运作良好."
" 我对TDD保留.在我们最后的项目(这是与TDD我的第一个也是唯一的项目经验,顺便说一下),我们甚至不知道设计是什么了."
"更多的代码评论很糟糕?你疯了吗?如果你不介意,我真的有一些工作要做." (从旧学校的更多评论是更好的评论,你永远不会有太多的评论.)
当一个新手抱怨TDD在他们有史以来第一个使用TDD的项目中"不起作用"时,它真的是TDD失败了,还是开发者自己的技能还不足以取得好成绩?
我怎么能在没有他们讨厌我的情况下沟通呢?
问题的关键在于,可以通过外交方式向开发人员传达什么,以鼓励他们用新的开发技术对他们自己新生和不足的能力进行更诚实的评估,而不会危及我们重要的工作关系?
通常情况下,许多开发人员显然还没有完全掌握TDD的许多重要元素,以便在他们的第一个项目上完成它.
例如,我与之交谈的开发社区中的抱怨通常是:
从来没有尝试过查看或记住代码气味列表.
从来没有尝试过研究重构目录,也没有在实际项目或玩具项目中进行过任何学习.对于那些人来说,可能需要学习更多的OOP,以便能够很好地进行重构.重构远远不仅仅是"重命名方法"和"重命名变量",它们在Visual Studio 2005重构菜单中显示为项目.
从来没有尝试过研究或参与使用紧急设计(通过重构)实现的实际项目,而不是提前使用设计完成整个项目,而不是仅在编写代码后编写单元测试的整个项目,并且知道差异和任何一个之间的权衡和适用性.
他们似乎都已经使用NUnit的,一次,所以无论他们用它做,这是TDD,天哪,他们似乎认为.NUnit或单元测试的存在,并不意味着TDD,但他们甚至不知道甚至不知道.
这些都是聪明人.开发人员是聪明人,因为这是进入整个职业的障碍.你不能在职业中待太久.当然,他们可以理解它,如果他们自己应用一段时间来研究这些材料.
当人们的经验和知识总和显然太弱而无法对方法论或其结果进行评估时,人们如何能够诚实地告诉自己一种方法论是薄弱的?
然而他们确实......我相信这是自我保护行为.或者是懒惰.如果你甚至不能从Fowler重构书的目录中命名三个重构,或者如果你不能说出几个代码气味,你就是重构的新手,也可能是整个TDD方法,你所谓的1或者2个项目经验显然是不够的.
我可以对人们说什么或者我可以引导人们注意哪些材料,让他们做更多关于TDD成功所依赖的技能的知识,例如:
每个主题都有完整的书籍,有些非常好.也许有一些更易于学习的技巧?我可以通过榜样教导人们,但我给自己的时间是有限的,而且,我在所有这些技术中也不是黑带.
而且,他们在一起.没有彼此,他们的工作效果不佳.单元测试和重构像花生酱和果冻一样.如果你不能进行grep单元测试,那么你的重构肯定不会有很好的结果!(问我为什么如果你还不知道,我很乐意向新人解释.)
无论我做什么或说什么,它都不会适得其反:
我不能疏远我的同事们的TDD概念 ; 而且,我不能疏远我的同事. 我将不得不每周与他们一起工作多年.
特别难以让其他长期高级开发人员感到不安,他们已经确立了自己在编程的其他方面非常精通.他们理所当然地为自己过去的成就感到自豪,但他们的自负或他们在编程中掌握所有事物的自我概念,几乎无法克服,不会伤害他们的感情.一些高级开发人员尚未准备好面对他们不了解一些他们应该向别人学习的新技术.在编程时,高级开发人员可以更加习惯和舒适地成为会议室中的专家,有时他们要求被视为这样,即使在涉及TDD及相关技术和技术时完全不切实际.
我很高兴地报告说,在编写结构化自动化单元测试时,我已经取得了相当不错的成功,通过使用配对编程,一对一.我认为,结对编程为受训者提供了一些真实生活的例子和经验,以及对更有经验和知识渊博的从业者的直接指导.
但结对编程还不够.他们需要学习更多的重构,代码气味,OOP概念和OOD&A概念,而且我不能在一个项目中教授所有这些,甚至不是很接近.
tdd ×9
c# ×4
unit-testing ×3
asp.net-core ×1
bdd ×1
java ×1
laravel ×1
methodology ×1
nunit ×1
php ×1
phpunit ×1
ruby ×1
testing ×1