I'm not sure if this is a JustMock question, but it may be. I'm trying to test a Kendo datasource 'read' method which is implemented in my MVC controller. The datasource is actually part of a grid definition, but I have others that are in auto-complete controls.
The following is a fragment of my grid definition in the view.
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Events(events => events.Error("error_handler").RequestEnd("onGridRequestEnd"))
.Model(model =>
{
model.Id(p => p.Id);
model.Field(p => p.Id).Editable(false);
model.Field(p => p.PostedStr).Editable(false);
model.Field(p => p.UpdatedStr).Editable(false);
})
.Read(read => read.Action("_GetBulletins", "Bulletins").Type(HttpVerbs.Get))
.Create(create => create.Action("_CreateBulletin", "Bulletins").Type(HttpVerbs.Post).Data("sendAntiForgery"))
.Update(update => update.Action("_UpdateBulletin", "Bulletins").Type(HttpVerbs.Post).Data("sendAntiForgery"))
.Destroy(update => update.Action("_DeleteBulletin", "Bulletins").Type(HttpVerbs.Post).Data("sendAntiForgery"))
)
My controller methods is:
[AcceptVerbs(HttpVerbs.Get)]
[AjaxOnly]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult _GetBulletins(DataSourceRequest request)
{
var model = (BulletinsViewModel)ViewModels.GetModel(HttpContext, Constants.Session.Model.BulletinsViewModelId);
var enumerableModel = model.Bulletins.AsEnumerable();
return Json(enumerableModel.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
and a fragment of my test is:
var request = new DataSourceRequest()
{
Aggregates = new List<
AggregateDescriptor
>(),
Filters = new List<
IFilterDescriptor
>(),
Groups = new List<
GroupDescriptor
>(),
Sorts = new List<
SortDescriptor
>(),
Page = 1,
PageSize = 10
};
// Act
var result = controller._GetBulletins(request) as JsonResult;
var model = result.Data as BulletinsViewModel;
When I run my test, the controller throws and exception:
System.ArgumentNullException: 'Value cannot be null.' Message:"Value cannot be null.\r\nParameter name: source"
Obviously I'm not setting up the 'request' properly, althought I don't exactly know what's wrong.
Rather than spin my wheels trying to figure that out, I wonder if you can advise me on the recomended approach to testing datasources.
TIA
Dave
Hi there, I'm trying to profile a very slow unit test using Visual Studio 2015 Enterprise, but this unit test uses JustMock.
When I try to profile the test, it returns with the following exception:
"Telerik.JustMock.Core.ElevatedMockingException:
Cannot mock 'ActuIT.Futurama.Config.Settings'. The profiler must be enabled to
mock, arrange or execute the specified target.
Detected
active third-party profilers:
*
{C60A40F7-B6A2-428C-8E87-E1BF6563F650} (from process environment)
Disable the
profilers or link them from the JustMock configuration utility. Restart the
test runner and, if necessary, Visual Studio after linking."
I've already linked the "Visual Studio 2015 Code Coverage/IntelliTrace" profiler in the Justmock settings, but this didn't change a thing.
Does anyone have a solution?
Hi
Does JustMock support unit testing for ASP .Net Core projects?
I am facing some dependency issues when i use JustMock to test ASP .Net Core project.
Thanks and Regards
Sujin
01.
using
System;
02.
using
System.Collections.Generic;
03.
using
Microsoft.VisualStudio.TestTools.UnitTesting;
04.
using
Telerik.JustMock;
05.
06.
namespace
JustMockTestProject
07.
{
08.
public
interface
IFoo
09.
{
10.
IBar Bar {
get
; }
11.
}
12.
13.
public
interface
IBar : IEnumerable<Object>
14.
{
15.
IBaz GetBaz();
16.
}
17.
18.
public
interface
IBaz {}
19.
20.
[TestClass]
21.
public
class
JustMockTest
22.
{
23.
[TestMethod]
24.
public
void
TestMethod1()
25.
{
26.
var foo = Mock.Create<IFoo>(Behavior.RecursiveLoose);
27.
var bar = Mock.Create<IBar>(Behavior.RecursiveLoose);
28.
29.
Assert.IsNotNull(bar.GetBaz());
// passes
30.
Assert.IsNotNull(foo.Bar.GetBaz());
// fails
31.
}
32.
}
33.
}
I am trying to test async method but i am getting null reference exception.
I have a service that has a GetAll method which is async: public async Task<IQueryable<T>> GetAll()
and the method under test is calling this method: await _service.GetAll();
I am mocking the service and then doing an arrange on the getAll method, but i get a null reference exception when the method is called in the code under test.
Mock.Arrange(() => mockService.GetAll()).Returns(Task.FromResult<IQueryable<Models.VM>>(vms.AsQueryable()));
Thanks
Vikas Mittal
Sorry if this is a noob question on JustMock, but I'm still learning the package.
VS 2017 Enterprise 15.2(26430.6) Release
.NET Framework 4.6.01586
XUnit.net 2.2.0
JustMock 2017.2.502.1
Created a unit test for testing an email module where I'm mocking the SmtpClient to keep it from actually sending emails in unit tests. When I run the tests either all together or individually, they run properly. When I attempt to use the Test->Analyze Code Coverage, several of them fail with:
Message: Telerik.JustMock.Core.ElevatedMockingException : Cannot mock
'Void Send(System.Net.Mail.MailMessage)'
. The profiler must be enabled to mock, arrange or execute the specified target.
Detected active third-party profilers:
* {9317ae81-bcd8-47b7-aaa1-a28062e41c71} (from process environment)
Disable the profilers or link them from the JustMock configuration utility. Restart the test runner and,
if
necessary, Visual Studio after linking.
I've tried some of the suggestions I've found in other forum topics like disabling Intellitrace, running VS elevated and enabling the VS2015 Intellitrace option in the JustMock Options menu. None of these combinations appear to make any difference. As it is, I'm unable to view code coverage using these unit tests which limits the usability.
Here's the code that passes except under Analyze Code Coverage:
var log = Mock.Create<ILog>();
Mock.Arrange(() => log.InfoFormat(EMailModule.Properties.Resources.Email_Send_log_SendingMessage,
_validSubject)).OccursAtLeast(1);
var smtpClient = Mock.Create<SmtpClient>(Behavior.CallOriginal);
Mock.Arrange(() => smtpClient.Send(Arg.IsAny<MailMessage>()))
.IgnoreArguments()
.IgnoreInstance()
.DoNothing()
.OccursOnce();
var mail =
new
Email(log, _testSMTPServer);
mail.Sender =
new
MailAddress(_validSender);
mail.EmailAddressesTo.Add(
new
MailAddress(_validEmail));
mail.Subject = _validSubject;
mail.Send();
Mock.Assert(smtpClient);
Mock.Assert(log);
Anyone have any suggestions? Is this a bug, a known issue with VS2017 and JustMock or just me being too new to JustMock a.k.a.I screwed something up?
Hi,
I have 2 interfaces (I1 and I2) that have a property called FileName. Another interface is inheriting these two interfaces. Let us call it I3.In I3, I am using new modifier (this is C#) so that in my code I do not get FileName property displayed twice and prevent compiler ambiguity errors.
When I mock interface I3 and set the FileName value, this value does not propagate to interfaces I1 and I2. This is not an issue in my actual code.
I have attached a sample pictures of the code. The first assert works. Second and third fail.
Assert.IsTrue(toTest.FileName == @"test file name", "FileName missing"); //1
Assert.IsTrue((toTest as Interface1).FileName== @"test file name","FileName missing"); //2
Assert.IsTrue((toTest as Interface2).FileName == @"test file name", "FileName missing"); //3
Am I doing something wrong OR is this a bug with the lite version of JustMock?
Thank you for time taken to read and any direction to resolve my challenge.
Sainath
Hi there
Is there any early access program or something similar for JustMock? Due to some license problems I had to move to Visual Studio 2017 RC and now I desperately need the JustMock Profiler...
Any chance?
Thank you for your help
Mike
[ClassInitialize()]
public
static
void
MyClassInitialize(TestContext testContext)
{
Mock.Partial<EagleUtility>().For(() => EagleUtility.ValidateMessage(Arg.IsAny<byte[]>(), Arg.AnyInt, TowerTypes.Unified)); Mock.Partial<UnifiedProtocolTranslator>();
}
public
void
RecieveIncomingMessageTest()
{
var expectedTower = TestContext.DataRow[
"Tower"
].ToString();
var expectedEventDescription = TestContext.DataRow[
"EventDescription"
].ToString().TrimStart(
'\r'
,
'\n'
,
' '
);
expectedEventDescription = expectedEventDescription.TrimEnd(
' '
,
'\n'
,
'\r'
,
'\0'
);
var rawDataToUse = Convert.FromBase64String(TestContext.DataRow[
"RawData"
].ToString());
var called =
false
;
var target =
new
UnifiedProtocolTranslator();
;
int
byteCount = rawDataToUse.Length;
EagleIncomingMessageStatus expected = EagleIncomingMessageStatus.Complete;
EagleIncomingMessageStatus actual;
Mock.NonPublic.Arrange<bool>(target, "ProcessIncomingMessage", rawDataToUse, 0).IgnoreArguments().DoInstead((byte[] arg1,int arg2) => called =true).Returns(true).MustBeCalled();
Mock.NonPublic.Arrange(target,
"CompileIncomingMessage"
).DoNothing().MustBeCalled();
actual = target.RecieveIncomingMessage(rawDataToUse, byteCount);
Mock.Assert(target);
Assert.AreEqual(expected, actual);
}
public
EagleIncomingMessageStatus RecieveIncomingMessage(
byte
[] message,
int
byteCount)
{
var messageType = (UnifiedIncomingMessageTypes) message[0];
EagleIncomingMessageStatus returnValue = EagleIncomingMessageStatus.Continue;
if
(EagleUtility.ValidateMessage(message, byteCount, TowerTypes.Unified))
{
if
(ProcessIncomingMessage(message, byteCount))
{
CompileIncomingMessage();
returnValue = EagleIncomingMessageStatus.Complete;
}
}
return
returnValue;
}