大家好
我们正在尝试将我们当前的构建代理从Windows移动到Linux (Ubuntu 20.04),用于我们所有的dotnet6.0应用程序,并尝试在这台机器上集成JustMock Profiler,因为我们在几个测试中依赖它。
因此,我们遵循您的集成文章”Linux上的JustMock集成".
我们已经将Profiler二进制文件复制到构建代理,并通过环境变量引用它:
root@8d248b92b005:/azp/Backend# printenv | grep 'CORE\|JUST' CORECLR_PROFILER_PATH=/opt/TelerikJustMock/JustMock_2022_1_223_1_Dev/Libraries/CodeWeaver/64/libTelerik.CodeWeaver.Profiler。所以CORECLR_PROFILER={B7ABE522-A68F-44F2-925B-81E7488E9EC0} JUSTMOCK_INSTANCE=1 CORECLR_ENABLE_PROFILING=1
用于引用JustMock库的csproj定义(目前)如下所示:
...<ItemGroup><参考包括=“Telerik。JustMock”><HintPath条件="存在('C:\Program Files (x86)\Progress\Telerik JustMock\Libraries\netcoreapp2.0\Telerik.JustMock.dll')">C:\Program Files (x86)\Progress\Telerik JustMock\Libraries\netcoreapp2.0\Telerik.JustMock.dllHintPath><HintPath条件=“存在(' / opt / TelerikJustMock / JustMock_2022_1_223_1_Dev /图书馆/ netcoreapp2.0 / Telerik.JustMock.dll’)”>/ opt / / netcoreapp2.0 / Telerik.JustMock.dll TelerikJustMock / JustMock_2022_1_223_1_Dev /库HintPath><私人>真正的私人>参考>ItemGroup>...
在测试中,我们调用以下方法来检查是否启用分析器:
公共类Test_JustMockProfiler_Enabled{(事实]公共无效ProfilerMustBeEnabled(){Mock.IsProfilerEnabled.Should () .BeTrue ();}}
然后使用'dotnet test'命令运行测试:
dotnet test /path/to/Tests.dll——no-build——no-restore -l:trx——results-directory ./TestResults/
但我们仍然得到以下错误:
错误信息:预期Mock。IsProfilerEnabled为true,但发现为False。
dotnet安装:
root@8d248b92b005:/azp/Backend# dotnet——info . net SDK(反映任意global.json):版本:6.0.402提交:6862418796运行环境:操作系统名称:ubuntu操作系统版本:20.04操作系统平台:Linux RID: ubuntu.20.04-x64基本路径:/ usr/share/dotnet/ SDK /6.0.402/ global。主机:版本:6.0.10架构:x64提交:5a400c212a . net sdk installed: 6.0.402 [/usr/share/dotnet/sdk] . net runtimes installed: Microsoft.AspNetCore. app 6.0.10 [/usr/share/dotnet/shared/Microsoft.AspNetCore. app 6.0.10 [/usr/share/dotnet/shared/Microsoft.AspNetCore. appMicrosoft.NETCore.App 6.0.10 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
我们是否遗漏了什么或者做错了什么?
我们如何正确地使Linux上的配置文件在“dotnet test”中运行?
提前感谢你的帮助,干杯。
我在使用JustMock时遇到了一个有趣的问题。简而言之,如果您使用c# using声明(而不是using块),并且让JustMock模拟同一程序集中的任何内容,运行时将抛出InvalidProgramException。
我可以把它缩小到最狭窄的情况来证明这一点。使用NUnit作为测试框架(我没有尝试过其他人),并引用JustMock,下面的代码将成功编译,但在运行时将抛出InvalidOperationException,当试图运行单元测试时。
(有关)
公用类夹具
{
公共接口ITest {}
公共类TestClass: IDisposable
{
公共无效处置()
{
}
}
(测试)
公共异步任务测试()
{
ITest mock = mock . create
使用TestClass test = new();
}
}
我尝试过这个问题的各种组合,它发生在。net 4.8(我们正在使用的)和。net 6.0上,以及我们正在使用的JustMock版本(2020.2.616.1)和最新的商业版本(2022.3.912.3)上。
要出现问题,using声明和模拟创建不需要在同一个测试中,甚至不需要在同一个fixture中,但是使用using声明的测试总是会失败,并出现异常。如果异步修饰符从单元测试中移除,问题就会消失。
关闭剖析器可以解决这个问题,就像关闭JustMock选项中的Automatic Mock Repository Cleanup Enabled标志一样。
我附上了一个简单的基于。net 6.0的项目来演示这个问题。
大家好
我们在内部Azure DevOps构建代理上遇到了一个问题,我们在那里安装了JustMock,从上周四到2022年10月6日的2.0.13版本,以及今天的2.0.14版本。
例外:
[xUnit.net 00:00:02.79] Telerik.JustMock.Core.ElevatedMockingException:不能模拟System.DateTime。必须启用剖析器来模拟、安排或执行指定的目标。[xUnit.net 00:00:02.79] Stack Trace: [xUnit.net 00:00:02.79] at Telerik.JustMock.Core.ProfilerInterceptor。ThrowElevatedMockingException (MemberInfo成员)[xUnit.net 00:00:02.79] at Telerik.JustMock.Core.MocksRepository.InterceptStatics(Type type, MockCreationSettings settings, Boolean mockStaticConstructor) [xUnit.net 00:00:02.79] at Telerik.JustMock.Core.CallPatternCreator.FromExpression(MocksRepository repository, Expression expr) [xUnit.net 00:00:02.79] at Telerik.JustMock.Core.MocksRepository.Arrange[TMethodMock](Expression expression, Func`1 methodMockFactory) [xUnit.net 00:00:02.79] at Telerik.JustMock.Mock.<>c__DisplayClass1_0”1。<安排>b__0() [xUnit.net 00:00:02.79] at Telerik.JustMock.Core.ProfilerInterceptor。GuardInternal [T] (Func 1 guardedAction)[xUnit.net 00:00:02.79] at Telerik.JustMock.Mock.Arrange[TResult](Expression`1 expression)
我们正在使用任务JustMockVSTest@2,没有额外的配置JustMock Profiler集,就像在您的集成指南中描述的那样:https://docs.telerik.com/devtools/justmock/integration/continuous-integration/tfs-azure/azure-devops
在系统上,有分析器安装在“C:\Program Files (x86)\Progress\Telerik JustMock\Libraries\CodeWeaver\
我们看到这个任务正在初始化分析器的路径(32位和64位)到$(System.DefaultWorkingDirectory),如下所示:
开始:威仕特- testAssemblies ============================================================================== 任务:Telerik JustMock威仕特2描述:使用VSTest运行程序运行Telerik JustMock模拟的测试。版本:2.7.1作者:Telerik帮助:https://docs.microsoft.com/azure/devops/pipelines/tasks/test/vstest ============================================================================== 设置JustMock SystemVssConnection存在如此 ====================================================== 32位JustMock分析器指定的路径是:D: \ azagent \<组织>A1 \ \ _work \<构建>64位JustMock分析器的指定路径为:D:\azagent\<组织>A1 \ \ _work \<构建>使用vstst .console.exe运行程序运行测试。======================================================
在Profiler初始化之前零:
开始:威仕特- testAssemblies ============================================================================== 任务:Telerik JustMock威仕特2描述:使用VSTest运行程序运行Telerik JustMock模拟的测试。版本:2.6.1作者:Telerik帮助:https://docs.microsoft.com/azure/devops/pipelines/tasks/test/vstest ============================================================================== 设置JustMock SystemVssConnection存在真正的SystemVssConnection存在如此 ====================================================== 32位JustMock分析器指定的路径是:零64位JustMock分析器指定的路径是:空SystemVssConnection存在true使用vstst .console.exe运行测试。======================================================
我们是否需要配置任何东西,比如分析器的绝对/相对路径?或者这是新版本中的bug ?
谢谢你的帮助。
干杯
在Visual Studio 2022中,第一个快速动作通常是“创建Mock”。当鼠标悬停在一个方法上时,这是在覆盖中使用的,我经常看到“JMA001”,这在编写非测试代码时没有帮助。
我知道我可以创建一个.editorconfig文件来抑制我所从事的每个项目的个别提示,但是如何防止JustMock提示完全跨项目在快速操作中使用呢?
我正在对遗留代码进行测试,这些代码实例化了一个ServiceController(在System.ServiceProcess中),以检查正在运行的SQL Server实例。我想将测试添加到我们的CI/CD构建管道中,所以我决定使用JustMock来未来模拟ServiceController,因为有问题的服务将不存在于构建服务器上。这些测试都使用xUnit。
然而,测试(通过xUnit的InlineData属性指定了3个变量)开始挂起第一个变量。它不只是长时间运行;我让它运行了几个小时(通常最多3秒的测试),CPU使用率可以忽略不计。ServiceController是IDisposable的,所以我想它可能与此有关。
经过大量的削减,我可以在一个新项目中用以下代码重现这个问题:
公共类JustMockTest{(理论] [InlineData (“测试”)]公共无效TestMethod(字符串无论){Mock.Arrange(() =>新ServiceController ()) .DoNothing ();}}
然而,这个测试(在同一类)工作得很好,大约在1秒内完成——注意,这是一个事实,而不是一个理论:
[事实]公共无效TestMethod2(){Mock.Arrange(() =>新ServiceController ()) .DoNothing ();}
这是JustMock v2022.1.223.1, xUnit v2.4.1.0和VS 2022。
起初,我想知道我的3个变体是否以某种方式踩在对方的Mock.Arrange()语句上;但是正如你所看到的,上面的测试,虽然被宣布为一个理论,但只有一个变体,仍然有问题。同样有趣的是,类似的MSTest设置也运行良好-所以这似乎是xunit特定的:
[TestClass]公共类UnitTest1{(DataTestMethod] [我们应该(“测试”)] [我们应该(“test2”)]公共无效TestMethod1(字符串无论){Mock.Arrange(() =>新ServiceController ()) .DoNothing ();}}
起初我认为IDisposable类可能是问题,但似乎它实际上是MarshalByRefObject;它是ServiceController和其他我可以复制(WebClient, MemoryStream等)的基类,我也可以通过模仿我自己的一个扩展MarshalByRefObject的简单类来复制。
这是已知的问题吗?是否有推荐的解决方案(不必为了MSTest或其他框架而放弃xUnit)?
谢谢!
杰里米
你好,
我试图在Azure Devops中运行. net core dll的Dotnet测试命令,它会为一些测试抛出异常,称升高的模拟异常。
使用的命令是
我希望Mock返回SQL语句并且不执行该语句。这是我所做的,但它一直运行“连接。执行(SQL)”。
字符串SQL = "";
Mock.Arrange(() => connection.Execute(参数。AnyString, null, null, null, null))。DoInstead((字符串arg1) => {SQL = arg1;}) .IgnoreInstance () .Returns (1);
WebApiProject.Controllers.DeleteController dc = new WebApiProject.Controllers.DeleteController();
dc.Post (mockedDeleteObject);
断言。(SQL == $"DELETE FROM TEST WHERE 1=1");
{后
SQL字符串;
SQL = $"delete from {TableName} where {WhereClause} ";
con.Execute (SQL参数);}
但是它会一直运行sql可执行语句
你好,
我对Telerik JustMock很感兴趣,所以我正在安装和测试JustMock的试用版。01.
(事实)
02.
公共
无效
Reconcile_LocationGroupChangedEvent_ReconcileSuccessfully ()
03.
{
04.
使用
(var容器=
新
MockingContainer <赋值>(设置)
05.
{
06.
/ /安排
07.
容器。安排(x =>x.Initialize()).OccursAtMost(1);
08.
09.
/ /行为
10.
container.Instance.Reconcile ();
11.
12.
/ /维护
13.
container.AssertAll ();
14.
}
15.
}
16.
17.
//正在测试的方法
18.
19.
公共
无效
协调()
20.
{
21.
Task.Factory.StartNew(() => facade.Initialize());
22.
}
我得到间歇错误时运行上述测试。它很少失败,以至于我无法调试。当它失败时,这是我在日志里看到的。
Reconcile_Test(失败)
系统。InvalidOperationException:集合被修改;枚举操作可能无法执行。
堆栈跟踪:
在System.ThrowHelper。ThrowInvalidOperationException (ExceptionResource资源)
2. System.Collections.Generic.Dictionary”enumerator.movenext ()
2. System.Linq.Enumerable.WhereSelectEnumerableIterator”movenext ()
在System.Linq.Enumerable。<
SelectManyIterator
> d__23“3. movenext ()
在System.Collections.Generic.List”1 . .男星(IEnumerable 1组)
在System.Linq.Enumerable。ToList [TSource] (IEnumerable ' 1源)
在Telerik.JustMock.Core.MocksRepository。GetDebugView(对象模拟)
在Telerik.JustMock.DebugView。< > c。<
get_CurrentState
> b__1_0 ()
在Telerik.JustMock.Core.ProfilerInterceptor。GuardInternal [T] (Func 1 guardedAction)
在Telerik.JustMock.DebugView。TraceEvent(IndentLevel traceLevel, Func ' 1消息)
在Telerik.JustMock.Core.Context.MockingContext。ResolveRepository (UnresolvedContextBehavior UnresolvedContextBehavior)
在Telerik.JustMock.Helpers.FluentHelper。< > c__DisplayClass13_0 ' 1。<
AssertAll
> b__0 ()
在Telerik.JustMock.Core.ProfilerInterceptor。GuardInternal (Action guardedAction)
在Telerik.JustMock.AutoMock.MockResolver。ForEachMock(行动' 1行动)
在Telerik.JustMock.Core.ProfilerInterceptor。GuardInternal (Action guardedAction)
E:\agt01\COM-CN-JOB1\AssignmentTest.cs(14,0): at AssignmentTest.Reconcile_Test()
不幸的是,我的JustMock不再工作了。我得到这个异常:
信息:背景知识:
-我从VS2019版本16.10.4和JustMock版本2019.2.620.1开始
—在Extensions->JustMock中启用了Profiler
-尝试重新安装->没有效果
VS2019升级到16.11.9 ->没有效果
-升级到JustMock 2022.1.119.1 ->无效
-以上只是一个例子,我所有使用JustMock的单元测试都失败了
-我问过一个同事,他也有同样的问题
我可能错过了什么设置/配置?
问候,
德克