我有一个.NET类,它创建并启动一个新System.Threading.Tasks.Task的如下:
public class ScheduledTask
{
private IFoo _foo;
public ScheduledTask(IFoo foo)
{
_foo = foo;
}
public void Start()
{
_task = new Task(() => Run());
_task.Start();
}
public void Stop(TimeSpan timeout)
{
var taskCompletedNormally = _task.Wait(timeout);
if (taskCompletedNormally)
{
_task.Dispose();
_task = null;
}
}
private void Run(){ // Do some work}
}
Run Code Online (Sandbox Code Playgroud)
如何在C#.Net中对单元ScheduledTask.Start和ScheduledTask.Stop方法进行单元测试?哪些是可用于此类单元测试的框架,哪些是单元测试线程(或任务并行)的最佳实践?
.net c# unit-testing task-parallel-library vs-unit-testing-framework
我有一个简单的C#程序,它有一组单元测试.这是在Visual Studio 2010上开发的.现在在另一台计算机上,我尝试使用Visual Studio 2012重新加载此解决方案并运行测试.我能够成功重建解决方案,但是没有任何单元测试显示在测试资源管理器中.Visual Studio项目(解决方案)位于LaCie以太网网络驱动器上.我将整个解决方案复制到我的本地C:驱动器,从网络驱动器关闭解决方案并在本地C:驱动器上重新打开复制的解决方案.现在,当我构建解决方案时,Test Explorer显示所有测试.我回去打开网络驱动器上的副本,再次测试资源管理器显示没有测试.它说构建解决方案以查看测试列表,但在成功构建包含主项目和单元测试项目的解决方案之后,它仍然显示相同的消息.见下图:

为什么项目位于网络驱动器上导致单元测试失败,没有任何失败消息?
c# unit-testing network-drive visual-studio vs-unit-testing-framework
是否可以针对使用Entity Framework 5.0 Code-First构建的localDb在Visual Studio 2012中运行单元测试?目前我们的开发是针对SQL Express服务器实例的,但由于Db不可用,因此无法与AppHarbor部署一起使用.
visual-studio vs-unit-testing-framework appharbor entity-framework-5
我为单元测试创建了一个自定义Assert类,当我想通知测试失败时,我不知道该怎么办:
public static class MyAssert
{
public static void Contains(File file, string text){
if(!ContainText(file, text)){
// what to do here?
}
}
}
Run Code Online (Sandbox Code Playgroud)
我反映了Microsoft.VisualStudio.TestTools.UnitTesting.AssertClass并注意到它调用了HandleFail:
internal static void HandleFail(string assertionName, string message, params object[] parameters)
{
string str = string.Empty;
if (!string.IsNullOrEmpty(message))
str = parameters != null ? string.Format((IFormatProvider) CultureInfo.CurrentCulture, Assert.ReplaceNulls((object) message), parameters) : Assert.ReplaceNulls((object) message);
if (Assert.AssertionFailure != null)
Assert.AssertionFailure((object) null, EventArgs.Empty);
throw new AssertFailedException((string) FrameworkMessages.AssertionFailed((object) assertionName, (object) str));
}
Run Code Online (Sandbox Code Playgroud)
但这是一种内部方法.我可以使用反射来调用它,或者抛出AssertFailedException更有意义吗?我还缺少另一种选择吗?
我有一个问题,我的[AssemblyCleanup]方法没有被调用。
我目前正在构建一个自动化框架,并希望在我的测试之前和之后完成一些 API 调用。我已经找到了程序集初始化/清理方法,它们非常适合我需要做的事情。但是我无法[AssemblyCleanup]运行该方法。
我有一个我的测试固有的基类,这就是我想要[AssemblyCleanup]放置方法的地方。
我的课。
[TestClass]
public class TestBaseChrome: WebDriver
{
public TestContext TestContext { get; set; }
[TestInitialize]
public void Initialize()
{
//Do Stuff Here for tests
}
[TestCleanup]
public void Cleanup()
{
//used for end of test reporting
}
[AssemblyCleanup]
public static void EndOfSuiteActions()
{
//Stuff here when whole test suite finished
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在这里和这里看到了示例,并表明[AssemblyCleanup]需要在具有该[TestClass]属性的类中。如果我将它[AssemblyCleanup]放在一个带有实际测试的类中,它会按预期工作。但我希望所有的前测试/后测试都放在一个地方。
任何意见,将不胜感激。
我有一个Web服务的测试项目,当我在调试模式下运行测试时,一切正常.但是,当我刚运行测试时,我得到以下错误,对于我尝试获取代码覆盖率的引用程序集:
类初始化方法WebServiceTest.wstest.MyClassInitialize引发异常.System.IO.FileLoadException:System.IO.FileLoadException:无法加载文件或程序集'TestAssembly,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 57f286581e1d278a'或其依赖项之一.强名称验证失败.(来自HRESULT的异常:0x8013141A)---> System.Security.SecurityException:强名称验证失败.(来自HRESULT的异常:0x8013141A).我发现的所有内容都表示要在GAC中注册TestAssembly.这是我该怎么办?为什么它在调试模式下工作?谢谢
这是我第一次遇到单元测试,我试图理解如何在简单的日期验证中使用这个概念.
用户可以选择代表日期的ToDate,直到可以进行付款.如果我们的日期无效,则无法付款.
private void CheckToDate(DateTime ToDate)
{
if (Manager.MaxToDate < ToDate.Year)
//show a custom message
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下如何使用单元测试?
问候,
亚历克斯
谢谢你的回答:
正如你们许多人所建议的那样,我将拆分函数并将验证与消息显示分开,并使用单元测试.
public bool IsDateValid(DateTime toDate)
{
return (Manager.MaxToDate < toDate.Year);
}
Run Code Online (Sandbox Code Playgroud) c# unit-testing visual-studio-2010 vs-unit-testing-framework
在NUnit中,我可以从中获得测试结果context.Result.State.如果它NUnit.Framework.TestState.Success,那么我知道测试通过了.
在MSTest中,我如何获得该信息?
我看到了context.Properties.Keys,但没有一个人谈到测试结果的状态.
我是C#,.NET和VS的新手; 使用VS 2013 Ultimate.我正在尝试使用似乎是"VS方式"的东西来创建一个单元测试,但无法弄明白.
看起来罪魁祸首是我无法访问Microsoft.VisualStudio.TestTools.UnitTesting.Assert方法或封闭命名空间......我环顾四周,无法找到对此命名空间的任何引用.这是我需要安装的额外内容吗?在这一点上,我不知道该寻找什么.
我正在使用其他主要方法,这是一个庞大的PITA ......
c# unit-testing visual-studio vs-unit-testing-framework visual-studio-2013
我遇到了AutoFixture的问题,并为它提交了GitHub问题.但是,在这里进行一些搜索似乎有一些类似于我的问题的问题(但是没有解决)所以我想在这里询问是否具有更高的可见性.
问题是:我最近将我的NuGet 2.0项目(packages.config)升级到NuGet 3.0(project.json - 不要与ASP/.NET Core的project.json混淆).除了一组特定的测试外,所有东西都跳了起来:
那些使用AutoFixture的AutoData(或InlineAutoData)理论并进行修饰的测试.
我已经创建了一个非常简单的这个问题的复制品,可以在这里找到:https: //github.com/Mike-EEE/Stash/tree/master/ReSharper.NuGet30
(请注意,该名称反映了问题与ReSharper相关的初步印象,但它确实影响了它和本机VS单元测试运行器.)
您可以尝试构建解决方案,并且应该发现它构建正常,但是在ReSharper的测试运行器和本机VS测试运行器中都找不到测试(请注意我正在运行VS 2015 Update 3).
但是,注释掉这些行并重建应该成功发现所有测试.
这是一个头脑风暴,并且阻止我继续.我有一个考虑因素吗?FWIW,我已清空了我的%TEMP%\VisualStudioTestExplorerExtensions作为的xUnit的文档中建议,也没有工作,要么.
任何帮助将不胜感激!
unit-testing xunit.net autofixture vs-unit-testing-framework nuget
unit-testing ×7
c# ×6
mstest ×2
.net ×1
appharbor ×1
autofixture ×1
c#-4.0 ×1
nuget ×1
xunit.net ×1