Telerik Forums
JustMock Forum
1 answer
964 views

Hi,

I'm trying to create a pipeline on Azure for test/coverage using JustMock, my application is Core 5.0*

After a long journey to make the build work, now I'm encountering an issue with the test (JustMockVSTestV2)


steps:
- task: vs-publisher-443.jm-vstest-2.JustMockVSTest-2.JustMockVSTest@2
  displayName: 'VsTest - testAssemblies'
  inputs:
    testAssemblyVer2: |
     **\bin\**\*test*.dll
     !**\*TestAdapter.dll
     !**\*TestPlatform*
     !**\obj\**
     !**\bin\**\ref\**

    pathTo64BitJustMockProfiler: '[correctpath]\bin\Release\net5.0\runtimes\win-x64\native\Telerik.CodeWeaver.Profiler.dll'
    pathTo32BitJustMockProfiler: '[correctpath]\bin\Release\net5.0\runtimes\win-x86\native\Telerik.CodeWeaver.Profiler.dll'
    vsTestVersion: toolsInstaller
    runTestsInIsolation: true
    codeCoverageEnabled: true
    otherConsoleOptions: '/Framework:.NETCoreApp,Version=v5.0.401 /Enablecodecoverage /logger:trx'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

 

My Test functions requires elevation:


Mock.SetupStatic(typeof(AStaticClass));

var response = Mock.Create<IRestResponse<string>>(); //this is restsharp
            Mock.Arrange(() => response.Data)
                .Returns("SomeData");

var client = Mock.Create<RestClient>(Constructor.Mocked);
            Mock.Arrange(() => client.ExecuteAsync<string>(Arg.IsAny<IRestRequest>(), Arg.IsAny<CancellationToken>()))
                .IgnoreInstance()
                .TaskResult(response);

 

My test project works fine on my local machine when I enable JustMock profile, however I get a bunch of errors on Azure pipeline:


##[error][xUnit.net 00:00:03.76]     ProjectTests.GetAsync_StateUnderTest_ExpectedBehavior [FAIL]
[xUnit.net 00:00:03.76]       System.InvalidProgramException : Common Language Runtime detected an invalid program.
[xUnit.net 00:00:03.76]       Stack Trace:
[xUnit.net 00:00:03.79]            at ProjectTests.GetAsync_StateUnderTest_ExpectedBehavior()
[xUnit.net 00:00:03.79]            at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
[xUnit.net 00:00:03.79]            at ProjectTests.GetAsync_StateUnderTest_ExpectedBehavior()

ALSO

##[error]Testhost process exited with error: Cannot use file stream for [PATH\bin\Release\net5.0\testhost.deps.json]: No such file or directory
##[error]A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\hostedtoolcache\windows\dotnet'.
##[error]Failed to run as a self-contained app.
##[error]  - The application was run as a self-contained app because 'PATH\bin\Release\net5.0\testhost.runtimeconfig.json' was not found.
##[error]  - If this should be a framework-dependent app, add the 'PATH\bin\Release\net5.0\testhost.runtimeconfig.json' file and specify the appropriate framework.
##[error]. Please check the diagnostic logs for more information.

 

Please advice, I'm not able to make JustMock to work with Azure Pipeline.

 

Thanks

Ivo
Telerik team
 answered on 17 Sep 2021
1 answer
1.1K+ views

Hi Team

We tried executing justMock test cases in command prompt using justMock Console (licensed), dotCover and xUnit, but justMock Test execution failed and gave the error "System.InvalidProgramException : Common Language Runtime detected an invalid program." 

The command we use to execute is as follows:

start /wait "" "{PATH}\JustMock\Libraries\Telerik.JustMock.Configuration.exe" /link "dotCover"

"{PATH}\JustMock\Libraries\Telerik.JustMock.Console.exe" runadvanced --profiler-path-64 "{PATH}\JustMock\Libraries\CodeWeaver\64\Telerik.CodeWeaver.Profiler.dll" --command "{PATH}\JetBrains.dotCover.CommandLineTools.2021.1.3\dotCover.exe" --command-args "cover --reporttype=html --output=CodeCoverage\\index.html --targetexecutable=\"{PATH}\xunit.runner.console.2.4.1\tools\net472\xunit.console.exe\" -- \"{PATH}\{PATH_OF_JUSTMOCK_TEST_DLL}\""

start /wait "" "{PATH}\JustMock\Libraries\Telerik.JustMock.Configuration.exe" /unlink "dotCover"

 

Attaching the log and test code.

1 answer
211 views

Hi

I have a function:

    Public Function UpdatePasswordHistory(ByVal mods As DataSource, ByVal StaffCode As String, ByVal Password As String) As Integer


        Dim strSQl As New StringBuilder("Insert into [dbo].[PasswordHistory]([StaffCode],[Password],[DateSet])")
        strSQl.Append($"values('{StaffCode}','{EncryptPassword(UCase(Password))}','{System.DateTime.Today.ToString("yyyy-MM-dd")}')")


        Return mods.SqlDB.ExecuteNonQuery(strSQl.ToString())

    End Function

 

I want to create 2 tests.

The staffcode is a foreign key so must exists.

If no issues it should return 1. else 0.

My 2 tests always return 0.

I probably done this all wrong

   public void UpdatePasswordHistory_Staffcodeexists()
        {
            // Arrange
      var mockDS = Mock.Create<DataSource>();
            clsSecurity clsSecurity = Mock.Create<clsSecurity>();

            string Staffcode = "sahmed";
            string password = "test";
            Int32 rowsaffetced = 1;
            Int32 actualRowsaffected;

            Mock.Arrange(() => clsSecurity.UpdatePasswordHistory(mockDS, Staffcode, password)).Returns(rowsaffetced);

            actualRowsaffected = new clsSecurity().UpdatePasswordHistory(mockDS, Staffcode, password);

            Assert.AreEqual(rowsaffetced,actualRowsaffected);
        }

        [TestMethod]
        public void UpdatePasswordHistory_Staffcodedoesnotexist()
        {
            // Arrange
            var mockDS = Mock.Create<DataSource>();
            clsSecurity clsSecurity = Mock.Create<clsSecurity>();

            string Staffcode = "InvalidUser";
            string password = "test";
            Int32 rowsaffetced = 0;
            Int32 actualRowsaffected;

            Mock.Arrange(() => clsSecurity.UpdatePasswordHistory(mockDS, Staffcode, password)).Returns(rowsaffetced);

            actualRowsaffected = new clsSecurity().UpdatePasswordHistory(mockDS, Staffcode, password);

            Assert.AreEqual(rowsaffetced, actualRowsaffected);
        }

 

Ivo
Telerik team
 answered on 15 Jun 2021
Narrow your results
Selected tags
Tags
+? more
Top users last month
Mark
Top achievements
Rank 1
Yurii
Top achievements
Rank 1
Leland
Top achievements
Rank 2
Iron
Iron
Iron
Hon
Top achievements
Rank 1
Iron
Deltaohm
Top achievements
Rank 3
Bronze
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Mark
Top achievements
Rank 1
Yurii
Top achievements
Rank 1
Leland
Top achievements
Rank 2
Iron
Iron
Iron
Hon
Top achievements
Rank 1
Iron
Deltaohm
Top achievements
Rank 3
Bronze
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?