我正在用 c# 开始一个新项目,我正在寻找一种可以帮助我进行突变测试的工具。我以前使用 pitest 在 Java 中进行过突变测试。并且非常喜欢。
现在我正在为 C# 寻找这样的工具,我能找到的唯一工具要么在过去几年没有更新,要么仍在 alpha/beta 中
( cream , ninjaTurtles , Nester )。
有没有可靠的工具可以与 2010 年之后出现的工具一起使用?
编辑:
有人可能会说这个问题与 What mutation-testing frameworks exist? [closed] 重复.只有那个问题目前已有 8 年历史,并且那里讨论的大多数工具都无法使用,因为其中大多数在过去 6 到 8 年内没有更新。
我成功使用了以下 Visual Studio 2013 扩展:VisualMutator.Net。这是因为其他变异工具需要 Visual Studio 2005 或其他 super 过时的软件/框架等。
更多信息:http://visualmutator.github.io/web/
您基本上会得到如下所示的 UI:
TestingExample.Tests
将发生变异。可能您已经构建了项目Project & Project.Tests
您可以访问以下 mutans 列表:
ISD (ISK) – super /基本关键字删除
运算符在属于继承方法的重载方法中删除对基类方法的调用。
DMC – 委托(delegate)方法变更
运算符(operator)将一种处理委托(delegate)的方法更改为另一种具有相似签名的方法。
DEH – 事件处理变更委托(delegate)方法
运算符(operator)更改调用,在错误处理中添加或删除方法。企业管理人员,
EMM – 访问器、修改器方法更改
运算符将对类属性的调用更改为对同一类型的另一个属性的调用。电子病历 -
异常处理程序移除
如果存在另一个 catch 或 finally,则运算符移除 catch block 。
EHC – 异常处理变更
运算符将 catch block 的主体更改为抛出捕获的异常。
EXS——异常吞噬
运算符添加空 block catch(Exception e) 以便没有异常可以离开当前方法。
JTI、JTD – This 关键字插入、删除
如果存在具有相同名称的局部变量,则运算符添加或删除此关键字。
JID——成员变量初始化删除(Field Initialization Deletion)运算符删除
用适当的值初始化类的字段。
MCI——来自另一个继承类的成员调用
Operator 将对对象的方法调用更改为对另一个对象调用相同的方法。
PRV - 与其他兼容类型的引用分配
Operator 将把某个对象分配给引用更改为分配另一个兼容对象。
标准运算符:
AOR——算术运算符替换
运算符将算术运算(+、-、*、/、%)更改为该组中的另一个。
LOR——逻辑运算符替换
运算符将逻辑运算(&、|、^)更改为该组中的另一个。
LCR – 逻辑连接器替换
运算符将逻辑表达式中的连接符(,||)改成另一个。
ROR——关系运算符替换
运算符将每个关系运算符(>、<、<=、>=、==、!=)更改为同一组中的另一个。
SOR – 移位运算符替换
运算符将逻辑移位 (», «) 变为相反的移位。
OODL——运算符删除
Operator 从每个操作创建两个突变体,例如 +、-、>、<=、% 等。在一个中它删除操作
以及它左侧的内容,在另一个中它删除了操作及其右侧的内容(例如,从 y=a+b;将有以下突变体:y=a;和 y=b;) .
SSDL——语句 block 删除
运算符移除语句和赋值,但不移除声明(例如从 int y=15;将有以下突变体:int y;)。
结果如下所示:
突变得分
未杀死的突变体
杀死突变体
通过以下测试