Tag: unit testing

unit testing控制台c#app的最佳方式

我有一个简单的控制台应用程序 它被普通的主要解雇了,整个程序都在main中。 它使用命令行分析器库 。 然后我在解决方案中有第二个项目,包含应用程序的unit testing。 但我似乎没有找到从测试中启动主程序进程的好方法。 我当前启动该过程的代码看起来像这样。 … process = new Process(); process.StartInfo.FileName = “FooBar”; process.StartInfo.Arguments = arguments; // use it to start from testing environment process.StartInfo.UseShellExecute = false; // redirect outputs to have it in testing console process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; … 我试过设置 process.StartInfo.WorkingDirectory 至 AppDomain.CurrentDomain.BaseDirectory 和 Environment.CurrentDirectory; 但是,我是否必须指定控制台应用程序可执行文件的完整相对路径,或者是否有一种改进的方法来启动“已测试”应用程序的进程? 首先,我在“主要”程序中将我的测试作为一个类,然后它工作得很好。 当我将测试移动到他们自己的项目时,问题就开始了。 […]

Visual Studio – unit testing在项目中加载资源

目标是在这些Xml文件中给出一些数据来运行一些测试。 如何在unit testing方法中轻松地将给定的Xml文件加载到XmlDoc中? 目前的状态是: XmlDocument doc = new XmlDocument(); string xmlFile = “4.xml”; string dir = System.IO.Directory.GetCurrentDirectory() + @”\Msgs\” //dir is then the value of the current exe’s path, which is //d:\sourcecode\myproject\TestResults\myComputer 2009-10-08 16_07_45\Out //we actually need: //d:\sourcecode\myproject\Msgs\ doc.Load( dir + fileName); //should really use System.IO.Path.Combine()! 将该路径放在app.config只是一个简单的问题吗? 考虑到开发人员机器上可能存在不同的路径,我希望避免这种情况。 问题:在unit testing方法中,您如何编写算法将给定的Xml文件加载到XmlDocument中?

unit testing项目不是从构建服务器构建的

我的VS2010解决方案中有一个测试项目。 unit testing自己引用以下命名空间: using Microsoft.VisualStudio.TestTools.UnitTesting; 通过我的PC上的以下程序集访问: Assembly Microsoft.VisualStudio.QualityTools.UnitTestFramework C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 当我在我的PC上构建解决方案时,我没有任何问题; 测试将构建并运行正常。 我们有一个内部网页面,我们可以用它来启动构建服务器上的构建。 当我通过此页面构建时,构建失败并出现以下错误: Generator.cs(3,17): error CS0234: The type or namespace name ‘VisualStudio’ does not exist in the namespace ‘Microsoft’ (are you missing an assembly reference?) 显而易见的问题是上面提到的Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll在构建服务器上不存在。 我认为这将与VS2010一起安装,并且由于我的解决方案中的项目构建了.NET 4.0目标,我希望这将安装在构建服务器上。 解决这个问题的最简单方法是什么? 构建服务器不在我的管辖范围内,我并不特别想记录一个作业来安装新的库。

在ClassInitialize中生成的数据驱动测试:不再在Visual Studio 2012中工作

我已从Visual Studio 2010升级到Visual Studio 2012。 在我的unit testing项目中,我有一个[ClassInitialize]方法生成一个CSV文件,然后使用连接到CSV的[DataSource]将其输入数据驱动的[TestMethod]。 这在Visual Studio 2010中非常有用。 我无法在Visual Studio 2012中使用它。 似乎在VS2012中,MS测试运行器需要连接到[DataSource]的文件已经存在,否则将不会运行任何测试。 如果我自己创建CSV,则会运行数据驱动的测试,但它们不会获取[ClassInitialize]中创建的数据:似乎在[ClassInitialize]运行之前评估来自[DataSource]的测试列表。 有解决方法吗? 这是一个重现问题的最小项目。 对我来说,这在VS2010中取得了成功,但在VS2012中失败了。 TestProject.cs using System.Diagnostics; using System.IO; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestProject { [TestClass] public class DataDrivenUnitTest { private static bool _classInitializeCalled; private static int _testCount; public TestContext TestContext { get; set; } [ClassInitialize] public static void ClassInitialize(TestContext testContext) { […]

消息框和unit testing

我正在尝试找到从我的逻辑中解开消息框的最佳方法,以便我可以正确地对其进行unit testing。 现在我想知道如果我只是制作了一个单独的帮助类(C#)就足够了,我可以稍后为我的消息框存根。 例如: static class messageBoxHelper { public static void msgBoxAlg(string message, string title, MessageBoxButtons buttons, MessageBoxIcon icons, bool show) { if (show) { MessageBox.Show(message, title, buttons, icons); } } 然后,每当我需要使用消息框时,我只使用messageboxHelper / msgBoxAlg(…)而不是messagebox.show(…)。 使用bool show我可以在测试期间启用或禁用它。 我只是想知道这是否是“正确的方法”。 我的意思是,有更简单或更好的方法来做到这一点吗? 我不能只丢弃消息框,他们将“重要”信息传递给用户(“你想关闭这个窗口吗?”是/否等)。 它也可能只是我没有使用适当的软件工程,我应该将我的消息框与我的bussinesslogic分开更多?

什么是从多个线程进行unit testing的最佳方法?

这是从我的另一个问题开始的。 基本上,一旦我有代码访问该文件(将在一分钟内审查答案)什么是最好的测试方法? 我正在考虑创建一个方法,它只生成大量的BackgroundWorker或者其他东西并告诉他们所有加载/保存文件,并测试不同的文件/对象大小。 然后,从线程中获取响应以查看它是否失败/成功/使世界崩溃等。 你能提出任何关于最佳方法的建议吗? 正如我之前所说,这对我来说有点新鲜:) 编辑 关注ajmastrean的post: 我正在使用控制台应用程序来测试Debug.Asserts 🙂 更新 我最初使用BackgroundWorker来处理线程(因为我已经习惯了来自Windows开发)我很快就意识到当我执行多个操作(线程)需要在继续之前完成的测试时,我意识到它将会是让它做到这一点有点破解。 然后我跟进了ajmastrean的post并意识到我应该使用Thread类来处理并发操作。 我现在将使用这种方法进行重构(虽然是一种不同的方法)。

EF6 Mocking派生的DbSet

我正在尝试将新的模拟EF6应用到我现有的代码中。 我有一个扩展DbSet的类。 其中一个方法调用基类(BdSet)Create方法。 这是一个示例代码(不是完整的解决方案或真实姓名): public class DerivedDbSet : DbSet, IKeyValueDbSet, IOrderedQueryable where TEntity : class { public virtual bool Add(string value1, string value2) { var entity = Create(); // There is no direct implementation of the Create method it is calling the base method // Do something with the values this.Add(entity); return true; } } […]

如何将类修饰为代码覆盖率不可测试?

背景:Visual Studio 2008,C#,。Net 3.5。 我有许多实用程序类,它们不是单元可测试的。 这主要是因为它们与资源(例如数据库,文件等)交互。 有没有办法可以装饰这些类,以便Visual Studio代码覆盖引擎会忽略它们,所以不降低代码覆盖百分比?

使用MsBuild命令行执行unit testing

我为此使用脚本: “%ProgramFiles%\ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ TF.exe” get $ / DmlOnDemmand / recursive / force / noprompt 我建立了解决方案.sln call%msBuildDir%\ msbuild%solutionName%/ t:Rebuild / p:Configuration =%buildType% 现在,我想执行所有unit testing并检查一切正常。 如何使用像MSBuild这样的构建工具从命令行执行解决方案的.csproj项目的unit testing?

如何连续运行NUnit测试夹具?

我在C#/ NUNit中实现了几套集成测试。 每个测试套件都是一个单独的类,每个夹具设置从脚本创建并填充SQL Server数据库。 这一切都曾经在Resharper 5.1之前工作得很好。 不幸的是,Resharper 5.1开始同时运行多个灯具。 这是一个重大改变 – 他们都在尝试创建和填充相同的数据库,这显然最终会陷入混乱。 有什么方法可以让Resharper连续运行我的测试夹具吗? 如果没有,你会建议连续运行我的NUnit测试夹具,一次一个夹具? 单个测试运行的顺序无关紧要。