Telerik Forums
JustMock Forum
4 answers
233 views
If I'm have a class as a parameter to a mocked method, what does JustMock use to determine whether the parameters match or not?

e.g.

public class Bi
{
    protected bool Equals(Bi other)
    {
        return I == other.I;
    }
 
    public override int GetHashCode()
    {
        return I;
    }
 
    public override bool Equals(object obj)
    {
        return base.Equals(obj);
    }
    public int I { get; set; }
}
 
public interface IR
{
    bool Get(Bi bi);
}
 
public class G
{
    private readonly IR _r;
 
    public G(IR r)
    {
        _r = r;
    }
 
    public bool M()
    {
        var bi = new Bi {I = 1};
        return _r.Get(bi);
    }
}
 
[TestFixture]
public class Test
{
    [Test]
    public void Test1()
    {
        var bi = new Bi {I = 1};
        var r = Mock.Create<IR>();
 
        Mock.Arrange(() => r.Get(bi)).Returns(true);
        var g = new G(r);
        var b = g.M();
        Assert.That(b, Is.True);
    }
 
}
No matter what I do, I can't seem to get  the BI parameter to match correctly.
I've tried Equals and a bunch of the interfaces for testing equality and none seem to get called.
Do I need to use the Arg.Matches or should this work and I'm just missing something?
Mihail
Telerik team
 answered on 14 Feb 2013
5 answers
227 views
I installed the JustMock Q3 2012 SP2 trial version.
I am getting the above error. I also attached the stack trace.
Do let me any step i missed while running the sample test cases.

Thanks
Mohd Moyeen
Kaloyan
Telerik team
 answered on 12 Feb 2013
5 answers
309 views
I have the following Arrange code
var oRegMgr = Mock.Create<IRegionManager>();
var oCmdRegion = Mock.Create<IRegion>();
var oCmdView = Mock.Create<CommandingView>(Constructor.Mocked);
 
Mock.Arrange(() => oRegMgr.Regions[RegionNames.CommandingRegion]).Returns(oCmdRegion);
Mock.Arrange(() => oCmdRegion.ActiveViews.FirstOrDefault()).Returns(oCmdView);

This calls a function that does this
IRegion commandingRegion = oRegionManager.Regions[RegionNames.CommandingRegion];
CommandingView oCmdView = (CommandingView)commandingRegion.ActiveViews.FirstOrDefault();

(the region manager is returned via a previous call that supplies the mocked region manager, bu that is not germane here, so I have concentrated on the problem area. The access to the region manager sequence is used in several other unit tests, and works fine. When I step thru this in debug, the ProxyRegionManager is in fact the one being used).
I get the mocked region back from oRegionManager just fine. However, when the call to get FirstOrDefault happens, it returns null, NOT the mocked CommandingView.
Am I missing something in the Arrange for invoking FirstOrDefault?

Thanks

Kaloyan
Telerik team
 answered on 12 Feb 2013
7 answers
984 views
What is the just mock equivalent of setting the value of a private member variable?

public class foo
{
private IEventAggregator _ea;
...
}

I just want to do something like this:

foo mockedFoo = Mock.Create<foo>();
IEventAggregator fakeEA = Mock.Create<IEventAggregator>();
Mock.NonPublic.Arrange(foo, "_ea", fakeEA);

But this is not working for me and gives me an error:
System.ArgumentException: Could not resolve the target method; make sure that you have provided arguments correctly.
Kaloyan
Telerik team
 answered on 05 Feb 2013
1 answer
107 views
I posted a support ticket for this, but thought I'd ask in the forum as well. As show below, I attempt to JustMock a Prism view. When this unit test runs, and this line is encountered, I get an exception complaining that cannot locate the corresponding XAML for the view. The stack shows us  in the constructor of the CommandingView class, calling InitializeComponent, which does not sound like mocking. The text of the excpetion is:
{"The component 'CommandingViewProxy\\+6068b00980684baaaf2f95f50b66a803' does not have a resource identified by the URI '/Infrastructure;component/views/commandingview.xaml'."}

It seems I should possibly be doing something additional to JustMock a Prism view. Or some other setup is needed.
Anyone got any suggestions?
var oCmdView = Mock.Create<CommandingView>();
Kaloyan
Telerik team
 answered on 04 Feb 2013
11 answers
238 views

Hi, I'm trying to unit test a common interface used in a generic Repository, something like T GetWhere(Func<T, Boolean> where)...
When I set this expectation in a test

Mock.Arrange(() => bookRepo.GetWhere(book => book.Id == 1))
                 .Returns(expectedBook)
                 .MustBeCalled();

JustMock throws this exception:  "Telerik.JustMock.MockAssertionException: Setup contains calls that are marked as "MustBeCalled" but actually never called"
It seems the GetWhere() method was never call, to return the expected object.
Below is a simple example that illustrate the case.  
How should I rewrite the second test below so that I can mock and test these type of interfaces? 
Thanks in advance. 

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Telerik.JustMock; //Free version 2011.1.331.1
using Model.Infrastructure;
using Model;
  
namespace Model.Infrastructure
{
    public interface IRepository<T> where T : class
    {
        T GetById(int Id);
        T GetWhere(Func<T, Boolean> where);
    }
}
  
namespace Model
{
    public class Book
    {
        public int Id { get; set; }
        public string BookTitle { get; set; }
        public string OnLoanTo { get; set; }
        public Book(){}
    }
  
    public class BookService
    {
        private IRepository<Book> _bookRepository;
        public BookService(IRepository<Book> bookRepository)
        {
            this._bookRepository = bookRepository;
        }
  
        public Book GetSingleBook1(int bookId)
        {
            return _bookRepository.GetById(bookId);;
        }
  
        public Book GetSingleBook2(int bookId)
        {
            Book b = _bookRepository.GetWhere(x => x.Id == bookId);
            return b;
        }
    }
}
  
namespace Model.Tests
{
    [TestClass]
    public class AssortedTests
    {
        private Book expectedBook;
        private IRepository<Book> bookRepo;
        private BookService bookService;
  
        [TestInitialize]
        public void Setup()
        {
            expectedBook = new Book()
            { Id = 1,
              BookTitle =
"Adventures",
              OnLoanTo =
"John Smith"
            };
            bookRepo = Mock.Create<IRepository<Book>>();
            bookService = new BookService(bookRepo);
        }
  
        [TestMethod]
        public void Book_CanRetrieveBookFromRepository()
        {
            Mock.Arrange(() => bookRepo.GetById(1))
                             .Returns(expectedBook)
                             .MustBeCalled();
            //Act
            Book actualBook = bookService.GetSingleBook1(1); 
  
            Mock.Assert(bookRepo); //Pass...
            Assert.IsTrue(actualBook.BookTitle == "Adventures");
        }
  
        [TestMethod]
        public void Book_CanRetrieverFromRepositoryUsingLambdaExpressions()
        {
            Mock.Arrange(() => bookRepo.GetWhere(book => book.Id == 1))
                             .Returns(expectedBook)
                             .MustBeCalled();
            //Act
            Book actualBook = bookService.GetSingleBook2(1);
  
            Mock.Assert(bookRepo); //Throws the error...
            Assert.IsTrue(actualBook.BookTitle == "Adventures");
        }
    }
}
Ricky
Telerik team
 answered on 30 Jan 2013
1 answer
211 views
Is it possible to mock the static FormsAuthentication?  I would like to check that the SignIn and SignOut methods are called in an MVC LoginController.

I have a mocked LoginController, lc, and the following code:

Mock.SetupStatic(typeof(FormsAuthentication));
            Mock.Arrange(() => FormsAuthentication.SignOut()).OccursOnce();
 
            var result = lc.Logoff();
 
            Mock.Assert(() => FormsAuthentication.SignOut());

If I run this under debug it passes but if I just run it I get:
Test Name:  LogoffShouldCallFormsAuthenticationSignOut
Test FullName:  OfDisplays.WebTests.SecurityTests.LogoffShouldCallFormsAuthenticationSignOut
Test Source:    c:\SoftDev\Projects\OFDisplays\OfDisplays.Web\OfDisplays.WebTests\SecurityTests.cs : line 83
Test Outcome:   Failed
Test Duration:  0:00:01.9634171
 
Result Message:
Test method OfDisplays.WebTests.SecurityTests.LogoffShouldCallFormsAuthenticationSignOut threw exception:
System.IO.FileNotFoundException: Could not load file or assembly 'Telerik.CodeWeaver.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=87210992829a189d' or one of its dependencies. The system cannot find the file specified.WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
Result StackTrace: 
at System.Web.Security.FormsAuthentication.SignOut()
   at OfDisplays.Web.Controllers.LoginController.Logoff() in c:\SoftDev\Projects\OFDisplays\OfDisplays.Web\OfDisplays.Web\Controllers\LoginController.cs:line 57
   at OfDisplays.WebTests.SecurityTests.LogoffShouldCallFormsAuthenticationSignOut() in c:\SoftDev\Projects\OFDisplays\OfDisplays.Web\OfDisplays.WebTests\SecurityTests.cs:line 90

Kaloyan
Telerik team
 answered on 30 Jan 2013
6 answers
660 views
Hi There, 

Can anyone give me a hand of how to mock internal new instance in my unit test? my method like below:

        public List<Driver> SearchByDriverName(string driverName, bool? status)
        {
            IDriverDAC driverDAC = new DriverDAC();
            List<Driver> drivers = new List<Driver>();
            drivers = driverDAC.SearchByDriverName(driverName, status);
            return drivers;
        }

here i want to test this method, the first thing i need to do is mock the DriverDAC (mock driverDAC.SearchByDriverName 
method), but the issue is the DriverDAC
is not injected into this class, it is created by new instance, so i can not mock & by pass the SearchByDriverName method,
can anybody give me a light of how to do it? understand it is better to use DI to inject the class,
but due to some special reason by user, we can not change the design structure now.

Thanks!

Suyi


Kaloyan
Telerik team
 answered on 28 Jan 2013
3 answers
99 views
Hi,

I want to mock the webservice proxy class autogenerated by VS 2012, and when I call Mock.Create<portailSOAPClient>(), I have an ArgumentNullException.

   à System.IO.BinaryReader..ctor(Stream input, Encoding encoding, Boolean leaveOpen)
   à System.IO.BinaryReader..ctor(Stream input)
   à Telerik.JustMock.AssemblyBuilderHelper.ReadStrongKeyNamePairFromManifest()
   à Telerik.JustMock.AssemblyBuilderHelper.GetModuleBuilder(Boolean strongNamedAssembly)
   à Telerik.JustMock.AssemblyBuilderHelper.DefineModule(Type targetType)
   à Telerik.JustMock.Weaver.WeaverAssemblyBuilder.BuildDynamicAssembly(MethodBase methodBase, ModuleBuilder& moduleBuilder)
   à Telerik.JustMock.Weaver.DynamicInjector.Inject(Type targetType, MethodBase methodBase, MethodBase containerMethodInfo)
   à Telerik.JustMock.Weaver.DynamicInjector.Inject(Type targetType, MethodBase methodBase, MethodBase injectingMethod, Boolean force)
   à Telerik.JustMock.Weaver.DynamicInjector.Inject(Type targetType, MethodBase methodBase)
   à Telerik.JustMock.MockManager.SetupMock(Behavior behavior, Boolean static)
   à Telerik.JustMock.MockManager.CreateInstance()
   à Telerik.JustMock.FluentMock.Create()
   à Telerik.JustMock.Mock.Create(Type target, Action`1 settings)
   à Telerik.JustMock.Mock.Create(Type targetType, Constructor constructor, Behavior behavior)
   à Telerik.JustMock.Mock.Create[T](Constructor constructor)  

The proxy class generated by VS2012 is :
public partial class portailSOAPClient : System.ServiceModel.ClientBase<FiduPortail.portailSOAP>, FiduPortail.portailSOAP {}
     
Do you know how to resolve this issue.

Regards,
Mihail
Telerik team
 answered on 28 Jan 2013
2 answers
350 views
Hi,

I am trying to run my test case using MSTest, but i get below error, it seems profiler is not enabled, how to enable it thru command line?

MESSAGE:
Test method STB.EP.RBS.Test.TransportBooking.DriverComponentTest.testCheckExistDriver threw exception: 
Telerik.JustMock.MockException: Profiler must be enabled to mock/assert target SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated) method.
+++++++++++++++++++
STACK TRACE:
   at Telerik.JustMock.Handlers.InterceptorHandler.Create(Object target, MethodInfo methodInfo, Boolean privateMethod)
   at Telerik.JustMock.MockContext`1.SetupMock(MockExpression`1 expression)
   at Telerik.JustMock.Mock.<>c__DisplayClassd.<Arrange>b__c(MockContext`1 x)
   at Telerik.JustMock.MockContext.Setup[TDelgate,TReturn](Instruction instruction, Func`2 function)
   at Telerik.JustMock.Mock.Arrange(Expression`1 expression)
   at STB.EP.RBS.Test.TransportBooking.DriverComponentTest.testCheckExistDriver() in C:\Project\STB\RBS\Tests\STB.EP.RBS.Test\TransportBooking\DriverComponentTest.cs:line 58

Thanks!

Regards
Suyi
Kaloyan
Telerik team
 answered on 28 Jan 2013
Narrow your results
Selected tags
Tags
+? more
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?