我必须重构一个大的C#应用程序,我发现了很多从未使用过的函数.如何检查未使用的代码,以便删除所有未使用的功能?
我目前正在构建一个用PHP编写的PHP解析器,因为在我之前的问题中没有出现现有的解析器.该分析器本身运作得相当好.
现在很明显,解析器本身没什么用(除了静态分析).我想将转换应用于AST,然后将其编译回源代码.应用转换不是一个问题,普通的访客模式应该这样做.
我目前的问题是如何将AST编译回源代码.我看到基本上有两种可能性:
现在我想专注于1.因为2.似乎很难完成(但如果你有相关的提示,我想听听它们).
但我不确定哪种设计模式可用于编译代码.我看到实现这一点的最简单方法是->compile向所有节点添加一个方法.我在这里看到的缺点是,更改生成的输出的格式非常困难.人们需要更改节点本身才能做到这一点.因此,我正在寻找一个不同的解决方案.
我听说访客模式也可以用于此,但我无法想象它应该如何工作.据我了解访问者模式,你有一些NodeTraverser在所有节点上递归迭代并调用一个->visit方法Visitor.对于节点操作来说这听起来非常有前景,其中该Visitor->visit方法可以简单地更改它传递的Node,但我不知道它如何用于编译.一个显而易见的想法是将节点树从叶子迭代到根,并用源代码替换访问的节点.但这在某种程度上似乎不是一个非常干净的解决方案?
对于一个项目,我编写了一个wcf服务库.它可以在IIS和自托管服务中托管.
对于所有连接的外部系统,我提供了Mock实现,它们提供了一些通用数据,因此服务(库)保持运行和工作.它是一款经典的自动机/有限状态机.
引导时,所有数据源都连接在一起.在测试模式下,模拟实现是连接的.因此,当我运行测试时,服务库从自托管服务"启动",而不是IIS,状态机继续运行和处理数据包.
有没有办法从这样的运行中获得某种"测试覆盖率".
如果我可以告诉我从模拟对象提供的示例数据中遇到了哪些代码路径,我将非常感激.然后提供更多的testdata以获得更高的覆盖率.
如果我能做到这一点而不必提供"额外的"测试代码,那就太好了.我认为很多案例已经从模拟对象提供的数据中得到了解决.但是现在我没有起点.
以下是一些代码示例,可以更清楚地了解其含义.当然,代码被大大简化了.
在一个非常简单的控制台应用程序中启动服务(自托管版本)
static void Main(string[] args)
{
using (var host = new ServiceHost(typeof(MyServiceLib.Service.MyServiceLib)))
{
host.Open();
Console.ReadLine();
host.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
在服务库中,从该代码调用构造函数
public MyServiceLib()
{
Task.Factory.StartNew(this.Scaffold);
}
Run Code Online (Sandbox Code Playgroud)
这只不过是启动状态机
private void Scaffold()
{
// lots of code deleted for simplicity reasons
var dataSource = new MockDataSource();
// inject the mocked datasource
this.dataManager = new DataManager(dataSource);
// this runs in its own thread. There are parts that are started on a timer event.
this.dataManager.Start();
}
public class DataManager …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种工具,我可以针对我的代码库运行,以确定我编写的NUnit测试涵盖了我的代码的哪些区域.我会很感激任何建议,如果需要可以使用示例.谢谢!
是否可以在没有单元测试的情况下使用Visual Studio代码覆盖率?我想在正常的程序执行中进行覆盖率分析.
更新:
目前没有将Visual Studio Coverage工具用于我想要的解决方案,尽管dotCover似乎是一个很好的第三方解决方案.
在编写C#时,Visual Studio C#Express版本是一个足够的IDE - 而NUnit是编写单元测试的适当框架.但是,这种配对不足以建立这些测试的代码覆盖率.
我意识到Professional和Ultimate版本与MSTest集成并提供完全集成的代码覆盖......但是这限制了对购买相关IDE的人的覆盖验证 - 这并不理想.
我并不担心将覆盖率分析集成到IDE中......这是一种方法,但我对批处理生成的报告同样满意......这可以集成到持续集成中.
我担心覆盖率指标的质量 - 例如,我希望分支级别的覆盖率分析不仅仅是行级别.
我想象Visual Studio Professional/Ultimate对于Mono环境中的开发人员来说不是一个想法解决方案......谁能告诉我在这样的环境中通常使用什么?
是否有免费的商用代码覆盖率工具(低至有效的LOC级别)?
我知道VS2008团队版,但不幸的是没有预算来购买许可证!所以我正在寻找免费(如啤酒)替代品.
有任何想法吗?
问候,
我为一个项目(1000+)进行了大量的fitnesse测试.随着时间的推移,随着功能的变化,以及共享装置的出现,我们将留下未使用的孤立代码.但是怎么找到它?
对于那些不知道如何适合的人,你有一个像这样的维基页面:
| 当用户添加| 1 | 和| 2 | 他被退回了 3 |
在运行时将其映射到以下方法:
public bool WhenAUserAddsAndHeIsReturned(int first, int second, int expectedResult){
return ((first + second) == expectedResult)
}
Run Code Online (Sandbox Code Playgroud)
手工找到所有这些映射将是苦差事,写一个脚本来做这将是一项漫长而艰巨的任务.我相信一定有更好的解决方案.
是否有一个实用程序可以在测试运行时监视夹具dll,然后返回所有未运行的类和方法的列表?
c# ×6
.net ×2
unit-testing ×2
fitnesse ×1
metrics ×1
nunit ×1
php ×1
refactoring ×1
reflection ×1
wcf ×1