Hi there
We are facing an issue on our on-premise Azure DevOps build agents, where we have JustMock installed, since the version 2.0.13 from last Thursday 6th Oct. 2022 but also with the today's version 2.0.14.
Exception:
[xUnit.net 00:00:02.79] Telerik.JustMock.Core.ElevatedMockingException : Cannot mock 'System.DateTime'. The profiler must be enabled to mock, arrange or execute the specified target.
[xUnit.net 00:00:02.79] Stack Trace:
[xUnit.net 00:00:02.79] at Telerik.JustMock.Core.ProfilerInterceptor.ThrowElevatedMockingException(MemberInfo member)
[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.<Arrange>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)
We are using the task JustMockVSTest@2 and have no additional configurations for the JustMock Profiler set, like described in your integration guide: https://docs.telerik.com/devtools/justmock/integration/continuous-integration/tfs-azure/azure-devops
On the system there is the Profiler installed under "C:\Program Files (x86)\Progress\Telerik JustMock\Libraries\CodeWeaver\<bitness>\Telerik.CodeWeaver.Profiler.dll"
We see that the task is initializing the path to the Profiler (32bit and 64bit) to the $(System.DefaultWorkingDirectory) like:
Starting: VsTest - testAssemblies
==============================================================================
Task : Telerik JustMock VSTest v.2
Description : Use VSTest runner to run tests that are mocked with Telerik JustMock.
Version : 2.7.1
Author : Telerik
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/test/vstest
==============================================================================
SystemVssConnection exists true
Setting up JustMock
======================================================
The specified path to 32 bit JustMock profiler is: D:\azagent\<organisation>\A1\_work\<build>\s
The specified path to 64 bit JustMock profiler is: D:\azagent\<organisation>\A1\_work\<build>\s
SystemVssConnection exists true
Running tests using vstest.console.exe runner.
======================================================
Before the Profiler was initialized with null:
Starting: VsTest - testAssemblies ============================================================================== Task : Telerik JustMock VSTest v.2 Description : Use VSTest runner to run tests that are mocked with Telerik JustMock. Version : 2.6.1 Author : Telerik Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/test/vstest ============================================================================== SystemVssConnection exists true SystemVssConnection exists true Setting up JustMock ====================================================== The specified path to 32 bit JustMock profiler is: null The specified path to 64 bit JustMock profiler is: null SystemVssConnection exists true Running tests using vstest.console.exe runner. ======================================================
Is there anything we have to configure, like the absolute/relative path to the Profiler? Or is this a bug within the new release?
Thanks for your help.
Cheers
In Visual Studio 2022, the first quick action is often "Create Mock". As this is used in the overlay when hovering over a method, I see "JMA001" quite often, which is not helpful when writing non-test code.
I know that I could create a .editorconfig file to suppress individual hints for every project I work on, but how can I prevent the JustMock hints from being used in the quick actions completely across projects?
I'm working on tests for legacy code that instantiates a ServiceController (in System.ServiceProcess) to check for a running SQL Server instance. I want to add the tests to our CI/CD build pipeline, so I decided to use JustMock to future-mock ServiceController since the service in question will not exist on the build server. These tests are all using xUnit.
However, the test (which has 3 variants specified via xUnit's InlineData attributes) started hanging on the first variant. It's not just long-running; I've let it run for hours (it's normally a 3-second test at most), and CPU usage is negligible. ServiceController is IDisposable, so I figured it might have something to do with that.
After a lot of paring down, I can repro the problem with the following code in a new project:
public class JustMockTest
{
[Theory]
[InlineData("test")]
public void TestMethod(string whatever)
{
Mock.Arrange(() => new ServiceController()).DoNothing();
}
}
However, this test (in the same class) works fine and completes in about 1s - note that it's a fact, not a theory:
[Fact]
public void TestMethod2()
{
Mock.Arrange(() => new ServiceController()).DoNothing();
}
This is JustMock v2022.1.223.1, xUnit v2.4.1.0, and VS 2022.
At first I wondered if my 3 variants were somehow stepping on each other's Mock.Arrange() statements; but as you can see, the top test, while declared as a theory, only has 1 variant and still has the problem. What's also interesting is that an analogous setup for MSTest also runs fine - so this seems to be xUnit-specific somehow:
[TestClass]
public class UnitTest1
{
[DataTestMethod]
[DataRow("test")]
[DataRow("test2")]
public void TestMethod1(string whatever)
{
Mock.Arrange(() => new ServiceController()).DoNothing();
}
}
At first I thought IDisposable classes may be the problem, but it seems it's actually MarshalByRefObject; it's a base class of ServiceController and others I can repro with (WebClient, MemoryStream, etc.), and I can also repro by mocking a simple class of my own that extends MarshalByRefObject.
Is this a known issue? Are there recommended workarounds (without having to ditch xUnit for MSTest or another framework)?
Thanks!
Jeremy
Hi,
I am trying to run to Dotnet Test command for .NetCore dll in Azure Devops and It throws exception for some tests saying elevated Mocking Exception.
Comand Used is
Hi,
I'm interested in Telerik JustMock, so I'm installing and testing a trial version of JustMock.I want the Mock to return the SQL statement and Not execute the statement. This is what i have done but it keeps running the "connection.execution(SQL)".
string SQL = "";
Mock.Arrange(() => connection.Execute(Arg.AnyString, null, null, null, null)).DoInstead((string arg1) => { SQL = arg1; }).IgnoreInstance().Returns(1);
WebApiProject.Controllers.DeleteController dc = new WebApiProject.Controllers.DeleteController();
dc.Post(mockedDeleteObject);
Assert.IsTrue(SQL == $"DELETE FROM TEST WHERE 1=1");
Post{
string SQL;
SQL = $"delete from {TableName} where {WhereClause} ";
con.Execute(SQL,parameters );}
But it keeps running the sql executable statement
01.
[Fact]
02.
public
void
Reconcile_LocationGroupChangedEvent_ReconcileSuccessfully()
03.
{
04.
using
(var container =
new
MockingContainer<Assignment>(settings))
05.
{
06.
//Arrange
07.
container.Arrange<IFacade>(x =>x.Initialize()).OccursAtMost(1);
08.
09.
//Act
10.
container.Instance.Reconcile();
11.
12.
//Assert
13.
container.AssertAll();
14.
}
15.
}
16.
17.
// Method under test
18.
19.
public
void
Reconcile()
20.
{
21.
Task.Factory.StartNew(() => facade.Initialize());
22.
}
I am getting intermittent errors when running the above Test. It fails so infrequently that I am unable to debug. When it fails, here is what I see in the logs.
Reconcile_Test [FAIL]
System.InvalidOperationException : Collection was modified; enumeration operation may not execute.
Stack Trace:
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.<
SelectManyIterator
>d__23`3.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Telerik.JustMock.Core.MocksRepository.GetDebugView(Object mock)
at Telerik.JustMock.DebugView.<>c.<
get_CurrentState
>b__1_0()
at Telerik.JustMock.Core.ProfilerInterceptor.GuardInternal[T](Func`1 guardedAction)
at Telerik.JustMock.DebugView.TraceEvent(IndentLevel traceLevel, Func`1 message)
at Telerik.JustMock.Core.Context.MockingContext.ResolveRepository(UnresolvedContextBehavior unresolvedContextBehavior)
at Telerik.JustMock.Helpers.FluentHelper.<>c__DisplayClass13_0`1.<
AssertAll
>b__0()
at Telerik.JustMock.Core.ProfilerInterceptor.GuardInternal(Action guardedAction)
at Telerik.JustMock.AutoMock.MockResolver.ForEachMock(Action`1 action)
at Telerik.JustMock.Core.ProfilerInterceptor.GuardInternal(Action guardedAction)
E:\agt01\COM-CN-JOB1\AssignmentTest.cs(14,0): at AssignmentTest.Reconcile_Test()
Unfortunately my JustMock does not work anymore. I get this exception:
Message:Some background:
- I started of with VS2019 version 16.10.4 and JustMock version 2019.2.620.1
- Profiler is enabled in Extensions->JustMock
- tried to reinstall -> no effect
- upgraded VS2019 to 16.11.9 -> no effect
- upgraded to JustMock 2022.1.119.1 -> no effect
- Above is just a sample, all of my unit tests that use JustMock fail
- I checked a colleague and he had exactly the same problem
Any setting/config I might have missed?
Regards,
Dirk
Hi,
I'm getting the following error for a blazor project using MSTest2 using JustMock flite.
Message:
Test method vx.test.TestsWeb.TestSystemSetup.All_12_Cards_are_found threw exception:
System.TypeInitializationException: The type initializer for 'Telerik.JustMock.Core.Context.MockingContext' threw an exception. ---> System.InvalidOperationException: Some attribute type among Xunit.FactAttribute, xunit.core,Xunit.TheoryAttribute, xunit.core not found.
Stack Trace:
HierarchicalTestFrameworkContextResolver.CreateAttributeMatcher(String[] attributeTypeNames)
HierarchicalTestFrameworkContextResolver.AddRepositoryOperations(String[] attributeTypeNames, Func`2 getKey, Func`3 isInheritingContext, Boolean isLeaf, Boolean isUsedOnAllThreads)
HierarchicalTestFrameworkContextResolver.SetupStandardHierarchicalTestStructure(String[] testMethodAttrs, String[] testSetupAttrs, String[] fixtureSetupAttrs, String[] assemblySetupAttrs, FixtureConstuctorSemantics fixtureConstructorSemantics)
XUnit2xMockingContextResolver.ctor()
MockingContext.cctor()
--- End of inner exception stack trace ---
MockingContext.get_CurrentRepository()
<>c__38`1.<Create>b__38_0()
ProfilerInterceptor.GuardInternal[T](Func`1 guardedAction)
Mock.Create[T]()
TestSystemSetup.All_12_Cards_are_found() line 25
From the following code:
[TestClass]
public class TestSystemSetup : Bunit.TestContext
{
[TestMethod]
public void All_12_Cards_are_found()
{
// Syncfusion setup
JSInterop.Mode = JSRuntimeMode.Loose;
Services.AddSyncfusionBlazor();
// Arrange
IApplicationConfigurationSingleton ApplicationConfigurationSingletonMockObj = Mock.Create<IApplicationConfigurationSingleton>();
Mock.Arrange(() => ApplicationConfigurationSingletonMockObj.Branding_Button_Background_Color).Returns("0xffff");
Mock.Arrange(() => ApplicationConfigurationSingletonMockObj.Branding_Button_Border_Color).Returns("0xffff");
Mock.Arrange(() => ApplicationConfigurationSingletonMockObj.Branding_Button_Color).Returns("0xffff");
Mock.Arrange(() => ApplicationConfigurationSingletonMockObj.IsLicenceExpired).Returns(false);
Mock.Arrange(() => ApplicationConfigurationSingletonMockObj.DaysValidity).Returns(10);
Services.AddSingleton<IApplicationConfigurationSingleton>(ApplicationConfigurationSingletonMockObj);
ISystemSetupRepository SystemSetupRepositoryMockObj = Mock.Create<ISystemSetupRepository>();
Mock.Arrange(() => SystemSetupRepositoryMockObj.GetMenuSummary()).Returns(Task.FromResult(GetSummary_DataSet()));
Services.AddSingleton<ISystemSetupRepository>(SystemSetupRepositoryMockObj);
// Act
IRenderedComponent<SystemSetup> cut = RenderComponent<SystemSetup>();
// Assert all 12 cards are found
cut.Find("#Software_licence");
cut.Find("#Audit_Log");
cut.Find("#Snapshots");
cut.Find("#User_Authentication");
cut.Find("#Source_Of_User_Information");
cut.Find("#Application_Parameters");
cut.Find("#Attachments");
cut.Find("#Data_Export_Profiles");
cut.Find("#Email_Settings");
cut.Find("#Custom_Help");
cut.Find("#Splunk_Settings");
cut.Find("#ServiceNow_Settings");
}
}
A bit puzzled as to why the error references xunit.
Hi,
Please let me know on how do we mock a private constructor.
Example:
public class Test