请问这种情况能做单元测试吗?

nicholasXXX 2010-05-08 01:54:34
程序是dll,要被主程序(不是我们开发的)调用采用运行

这种情况能做单元测试吗?
...全文
121 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicholaskj 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sp1234 的回复:]

引用 6 楼 nicholaskj 的回复:
这个够呛,单元测试的进程是有VS控制的


看不懂,这就更不知道从何谈起了。
[/Quote]

楼主说的dll依赖性问题,这个很难吧,
gnefuil 2010-05-10
  • 打赏
  • 举报
回复
假设你的dll还需要调用别人的dll,那么你mock一下下层要调用的dll的功能,不就可以了?

[Quote=引用 12 楼 nicholasxxx 的回复:]

引用 11 楼 sp1234 的回复:

引用楼主 nicholasxxx 的回复:
程序是dll,要被主程序(不是我们开发的)调用采用运行

这种情况能做单元测试吗?


实际上不管是你写个DLL发布给别人,还是别人写个DLL发布给你,原则都是一样的,不要经院式地纠缠于“什么叫做单元测试”这个概念。写测试目的只是为了用代码把你为什么要随后花3个小时写一片代码的心里所想的初衷用可……
[/Quote]
Taiyangchen 2010-05-10
  • 打赏
  • 举报
回复
测试是肯定可以测试的

用NUnit来测试,不过如果你发现Dll有问题了,那么开发组的人肯定要改dll的代码,重新生成dll,这时极有可能导致其它代码不兼容,所以你又得做回归测试了。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nicholaskj 的回复:]
这个够呛,单元测试的进程是有VS控制的
[/Quote]

看不懂,这就更不知道从何谈起了。
nicholaskj 2010-05-09
  • 打赏
  • 举报
回复
这个够呛,单元测试的进程是有VS控制的
nicholasXXX 2010-05-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sp1234 的回复:]

引用楼主 nicholasxxx 的回复:
程序是dll,要被主程序(不是我们开发的)调用采用运行

这种情况能做单元测试吗?


实际上不管是你写个DLL发布给别人,还是别人写个DLL发布给你,原则都是一样的,不要经院式地纠缠于“什么叫做单元测试”这个概念。写测试目的只是为了用代码把你为什么要随后花3个小时写一片代码的心里所想的初衷用可执行的代码文档固定下来,并且每天可以重复测试1……
[/Quote]

误解我的意思了。

我的情况是,二次开发的dll,只能被主程序调用才能实现功能,并且编译的时候还要加人人家指定的几个dll,而且主程序不是我们开发的。说的简单点就是外挂,就是插件。

现在的问题来了,我想做单元测试,控制我们开发的dll功能(改动代码)能够在测试下通过再发布。
然而,目前的单元测试的形式都是独立的dll之类的形势,所以我不知道怎么搞。
  • 打赏
  • 举报
回复
[Quote=引用楼主 nicholasxxx 的回复:]
程序是dll,要被主程序(不是我们开发的)调用采用运行

这种情况能做单元测试吗?
[/Quote]

实际上不管是你写个DLL发布给别人,还是别人写个DLL发布给你,原则都是一样的,不要经院式地纠缠于“什么叫做单元测试”这个概念。写测试目的只是为了用代码把你为什么要随后花3个小时写一片代码的心里所想的初衷用可执行的代码文档固定下来,并且每天可以重复测试1000遍,即使1年之后也可以随时拿出来回归测试。当你习惯了这样写,测试代码要比空洞的设计文档来得实在。

比如你跟别人协作,那么你跟别人打成的协议、别人给你写的需求、假设你负责设计一部分业务逻辑、过去发布过的功能现在客户又有新的更改需要架构变通了........这些如果会造成你随后2、3个小时写点实现代码,那么你就可以先用测试代码写出来,然后让测试可以通过就完了。当你的测试可以跑通,就可以把你的DLL(当前版本)发布给别人使用(使用你刚刚测试通过的接口功能),随时可以发布,随时可以把测试日志截取一块并打印出来作为api调用说明。而不需要花费大量时间搞什么理论分析。

当你问“能做单元测试吗?”的时候,我发现的问题是:你对测试太胆战心惊了,而没能学着把它当作取得竞争优势的手段来使用。
  • 打赏
  • 举报
回复
当你只是关心自己为什么要写代码,而不去替别人担心,那么这个问题自然也就从来不必要提出。你只做必要的单元测试就足够了,简单来说就像我在#5楼所说的只要让你的单元测试覆盖到语句,而不是去管把别人的DLL变成白盒的。

写单元测试不要像个苍蝇一样围着已经写好的代码左思右想地去妄图搞什么条件覆盖之类的东西,你都写完了实现代码就很难真正立刻写出好的测试代码。把单元测试作为你设计的一部分、创意的一部分,先写测试后写实现代码,这才是不写无用的测试代码的真谛。
gnefuil 2010-05-09
  • 打赏
  • 举报
回复
单元测试一般是开发的时候写吧,因为开发者可以把大的模块分成小的,分别加以测试。
你把第三方的dll拿来对每个function进行测试,你也可以叫它单元测试,不过这种测试更大的可能是集成测试。
看你怎么定义“单元”了。
  • 打赏
  • 举报
回复
你只要关心自己为什么要写代码,在写代码之前就把为什么要写这个心理诉求用可执行的单元测试写出来。举个例子,假设有人给我一个“绣十字绣”的模块,我打算用它来把我老婆的照片秀出来,我会想出如何在程序中表达我老婆的照片,如何表达这个模块应有的输出结构,如何对比模块输出与照片的相似程度,例如我必须想一个办法用代码来测试如何验证这个模块把眼睛瞳孔生动刻画出来了,而不是简单地给模糊了.....

总之你只是关心你要用这个所谓DLL来干的具体事(可能一旦你炫耀空洞而宏伟的理想,就不知道眼前该如何真正去测试了),犯不上多此一举地帮别人去挑出那个所谓DLL中跟你的项目目前的需求无关的东西。


另外,当你需要访问数据库、远程服务或者很不稳定的第三方系统等等,应该自己创建Mock的接口以及Mock的数据,而往往并不使用真实的系统来测试。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 nicholasxxx 的回复:]
引用 2 楼 sp1234 的回复:

谁要做?对什么做?

如果是被强迫的,说出来谁强迫你做单元测试了呢?如果不是,那么你之前在自己的产品上做过什么覆盖程度的单元测试吗?


主要是做二次开发的dll,希望每次改动代码,能够很快暴露出问题
[/Quote]
你写了哪一行代码,就要让单元测试覆盖它(至少语句覆盖)。

所以你的问题反而让我糊涂了,你到底有什么可担忧的呢?
捷哥1999 2010-05-08
  • 打赏
  • 举报
回复
针对主程序中,调用此dll的方法,写测试代码,就可以了吧。
我的理解是,你希望修改这个dll,不要引起引用它的代码出现问题。如果是这样,我的思路应该可以。
nicholasXXX 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sp1234 的回复:]

谁要做?对什么做?

如果是被强迫的,说出来谁强迫你做单元测试了呢?如果不是,那么你之前在自己的产品上做过什么覆盖程度的单元测试吗?
[/Quote]

主要是做二次开发的dll,希望每次改动代码,能够很快暴露出问题
  • 打赏
  • 举报
回复
谁要做?对什么做?

如果是被强迫的,说出来谁强迫你做单元测试了呢?如果不是,那么你之前在自己的产品上做过什么覆盖程度的单元测试吗?

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧