Telerik论坛
JustMock论坛
1回答
25的观点

大家好

我们正在尝试将我们当前的构建代理从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”中运行?

提前感谢你的帮助,干杯。

Telerik团队
回答 2022年10月25日
1回答
13的观点

我在使用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的项目来演示这个问题。

Telerik团队
回答 10月12日
1回答
23日视图

大家好

我们在内部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\\Telerik.CodeWeaver.Profiler.dll”下

我们看到这个任务正在初始化分析器的路径(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 ?

谢谢你的帮助。

干杯

Telerik团队
回答 10月11日
1回答
47岁的观点

在Visual Studio 2022中,第一个快速动作通常是“创建Mock”。当鼠标悬停在一个方法上时,这是在覆盖中使用的,我经常看到“JMA001”,这在编写非测试代码时没有帮助。

我知道我可以创建一个.editorconfig文件来抑制我所从事的每个项目的个别提示,但是如何防止JustMock提示完全跨项目在快速操作中使用呢?

Telerik团队
回答 8月12日
1回答
40的观点

我正在对遗留代码进行测试,这些代码实例化了一个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)?

谢谢!
杰里米

Telerik团队
回答 2022年7月6日
2答案
175的浏览量

你好,

我试图在Azure Devops中运行. net core dll的Dotnet测试命令,它会为一些测试抛出异常,称升高的模拟异常。

使用的命令是

-任务DotNetCoreCLI@2
displayNamedotnet test -单元测试
输入
命令测验
项目“* * / * .UnitTest.csproj”
参数——no-build——configuration $(BuildConfiguration)——logger trx——collect "Code coverage" /p:CollectCoverage=true /p:Threshold=0 /p:ThresholdType=line /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(Build.SourcesDirectory)/TestResults/ coverage /p:ExcludeByAttribute="DebuggerNonUserCodeAttribute" /p:ExcludeByFile=\"**/obj/**/*.cs"
testRunTitle单元测试
Yanrafo
最高的成就
1级
回答 2022年7月6日
1回答
66的浏览量

我希望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可执行语句

福尔
最高的成就
1级
回答 2022年7月4日
1回答
49岁的观点

你好,

我对Telerik JustMock很感兴趣,所以我正在安装和测试JustMock的试用版。
我担心的是,我的开发环境与互联网断开了连接,所以当我购买完整版时,它无法安装。
完整版的安装和操作是否存在问题,即使在没有连接互联网的环境中?

谢谢你!
Xavime
最高的成就
1级
更新后的答案 2022年7月4日
5个回答
1.2 k +的观点
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()
Telerik团队
回答 2022年2月15日
2答案
232的浏览量

不幸的是,我的JustMock不再工作了。我得到这个异常:

信息:
测试方法ActuIT.Futurama.Test.TestEdit.EditorTest抛出异常:
elerik. justmock . core . elevatedmockingexception:不能模拟'System.IO.File'。必须启用剖析器来模拟、安排或执行指定的目标。

堆栈跟踪:
ProfilerInterceptor。ThrowElevatedMockingException (MemberInfo成员)
MocksRepository。InterceptStatics(类型类型,MockCreationSettings设置,布尔mockStaticConstructor)
< > c__DisplayClass69_0。< SetupStatic > b__0 ()
ProfilerInterceptor。GuardInternal (Action guardedAction)
模拟。SetupStatic(类型staticType,行为行为)
TestEdit。PerformTest(TestInput TestInput, String& logFile)第1413行
TestEdit。PerformTest(String testFile, String& logFile)第1400行
editortest()第360行

背景知识:

-我从VS2019版本16.10.4和JustMock版本2019.2.620.1开始

—在Extensions->JustMock中启用了Profiler

-尝试重新安装->没有效果

VS2019升级到16.11.9 ->没有效果

-升级到JustMock 2022.1.119.1 ->无效

-以上只是一个例子,我所有使用JustMock的单元测试都失败了

-我问过一个同事,他也有同样的问题

我可能错过了什么设置/配置?

问候,

德克

克里斯Vrolijk
最高的成就
1级
回答 1月31日
缩小结果范围
选择标签
标签
+?更多的
上个月使用最多的用户
保罗
最高的成就
1级
帕特里克
最高的成就
1级
DoomerDGR8
最高的成就
等级2
桑德罗
最高的成就
1级
根据法律的
最高的成就
等级2
想向其他开发者展示你的忍者超能力吗?
上个月使用最多的用户
保罗
最高的成就
1级
帕特里克
最高的成就
1级
DoomerDGR8
最高的成就
等级2
桑德罗
最高的成就
1级
根据法律的
最高的成就
等级2
想向其他开发者展示你的忍者超能力吗?
想向其他开发者展示你的忍者超能力吗?
Baidu
map