[TestMethod]public void ShouldAssertMockedGetAllCategories(){ NorthwindEntities entities = Mock.Create<NorthwindEntities>(); Category category = new Category() { CategoryName = "Beer" }; List<Category> allCategories = new List<Category> { category }; // Arrange Mock.Arrange(() => entities.Categories).ReturnsCollection(allCategories); // Act List<Category> categoriesList= entities.Categories.ToList(); // Assert Assert.AreEqual(1, categoriesList.Count); Assert.AreSame(category, categoriesList[0]);}Again, everything worked like a charm.
Since I don't access a ObjectContext directly I tried to make things a little bit real world like.
[TestMethod]public void ShouldAssertMockedGetAllCategories(){ NorthwindEntities entities = Mock.Create<NorthwindEntities>(); Category category = new Category() { CategoryName = "Beer" }; List<Category> allCategories = new List<Category> { category }; // Arrange Mock.Arrange(() => entities.Categories).IgnoreInstance().ReturnsCollection(allCategories); // Act //Some instance of some class calls the following lines of code somewhere, somehow. =) NorthwindEntities ne = new NorthwindEntities(); List<Category> categoriesList = ne.Categories.ToList(); // Assert Assert.AreEqual(1, categoriesList.Count); Assert.AreSame(category, categoriesList[0]);}
Test passed. \o/
Oops! I forget to call Dispose(). Let's first try the default way to do that.
[TestMethod]public void ShouldAssertMockedGetAllCategories(){ NorthwindEntities entities = Mock.Create<NorthwindEntities>(); Category category = new Category() { CategoryName = "Beer" }; List<Category> allCategories = new List<Category> { category }; // Arrange Mock.Arrange(() => entities.Categories).IgnoreInstance().ReturnsCollection(allCategories); // Act //Some instance of some class calls the following lines of code somewhere, somehow. =) List<Category> categoriesList; using (NorthwindEntities ne = new NorthwindEntities()) { categoriesList = ne.Categories.ToList(); } // Assert Assert.AreEqual(1, categoriesList.Count); Assert.AreSame(category, categoriesList[0]);}Uh-oh. An Exception was thrown at the end of using block.
Even if I call Dispose() directly (instead of using the using statement), test fails for the same reason.
[TestMethod]public void ShouldAssertMockedGetAllCategories(){ NorthwindEntities entities = Mock.Create<NorthwindEntities>(); Category category = new Category() { CategoryName = "Beer" }; List<Category> allCategories = new List<Category> { category }; // Arrange Mock.Arrange(() => entities.Categories).IgnoreInstance().ReturnsCollection(allCategories); // Act //Some instance of some class calls the following lines of code somewhere, somehow. =) NorthwindEntities ne = new NorthwindEntities(); List<Category> categoriesList = ne.Categories.ToList(); ne.Dispose(); // Assert Assert.AreEqual(1, categoriesList.Count); Assert.AreSame(category, categoriesList[0]);}Am I missing something here?
Thanks in advance.
#region Mocked Members protected HardCodedSiteOptionsEntity Target; protected IDependencyInjection InjectorMock; protected IMessageOperations MessageMock; #endregion [SetUp] public void InitializeBase() { Target = Mock.Create<HardCodedSiteOptionsEntity>(Behavior.CallOriginal); InjectorMock = Mock.Create<IDependencyInjection>(); MessageMock = Mock.Create<IMessageOperations>(); Target.Arrange(mockedObject => mockedObject.MessageOperationsHelper).Returns(MessageMock); //Target.MessageOperationsHelper = MessageMock; }internal class HardCodedSiteOptionsEntity : ISiteOptions, IBlockEntityPartBuilder<uint> { #region Internal Properties internal virtual BitArray StatusMaskData { get; set; } internal virtual IDependencyInjection InjectorHelper { get; set; } internal virtual IMessageOperations MessageOperationsHelper { get; set; } #endregion #region Constructor internal HardCodedSiteOptionsEntity() { InjectorHelper = new DependencyInjector(); MessageOperationsHelper = InjectorHelper.InjectEntity<IMessageOperations>(); StatusMaskData = new BitArray(32, false); }}I have Visual Studio 2010 and Visual Studio 2012 installed. Using JustMock version 2012.3.1016.3
Running the tests below I get the following in both VS 2010 and 2012.
Test Name: TestReadXML
Test FullName: DemoSerializationExceptionMock.ReadXMLMockIBusinessPrincipal_Tests.TestReadXML
Test Source: C:\Projects\MAS Applications\Experimental\Source\DemoSerializationExceptionMock\DemoSerializationExceptionMock\ReadXMLMockIBusinessPrincipal_Tests.vb : line 47
Test Outcome: Failed
Test Duration: 0:00:00.00937
Result Message:
Test method DemoSerializationExceptionMock.ReadXMLMockIBusinessPrincipal_Tests.TestReadXML threw exception:
System.Runtime.Serialization.SerializationException: Type is not resolved for member 'IPrincipalProxy+bce4039c8c9143c29217f51daf99a9a8,Telerik.JustMock, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8b221631f7271365'.
Result StackTrace:
at System.AppDomain.get_Evidence()
at System.AppDomain.get_EvidenceNoDemand()
at System.AppDomain.get_Evidence()
at System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName)
at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath)
at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)
at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)
at System.Configuration.ClientConfigurationHost.RequireCompleteInit(IInternalConfigRecord record)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
at System.Configuration.ConfigurationManager.GetSection(String sectionName)
at System.Xml.XmlConfiguration.XmlReaderSection.get_ProhibitDefaultUrlResolver()
at System.Xml.XmlReaderSettings.GetXmlResolver_CheckConfig()
at System.Xml.Schema.XmlSchemaSet.PreprocessSchema(XmlSchema& schema, String targetNamespace)
at System.Xml.Schema.XmlSchemaSet.Add(String targetNamespace, XmlSchema schema)
at System.Xml.Schema.XmlSchemaSet.Add(XmlSchema schema)
at System.Xml.Schema.XmlSchemaInference.CreateXmlSchema(String targetNS)
at System.Xml.Schema.XmlSchemaInference.AddElement(String localName, String prefix, String childURI, XmlSchema parentSchema, XmlSchemaObjectCollection addLocation, Int32 positionWithinCollection)
at System.Xml.Schema.XmlSchemaInference.InferSchema1(XmlReader instanceDocument, XmlSchemaSet schemas)
at System.Xml.Schema.XmlSchemaInference.InferSchema(XmlReader instanceDocument)
at System.Data.DataSet.InferSchema(XmlDocument xdoc, String[] excludedNamespaces, XmlReadMode mode)
at System.Data.DataSet.ReadXml(XmlReader reader, Boolean denyResolving)
at System.Data.DataSet.ReadXml(TextReader reader)
at DemoSerializationExceptionMock.ReadXMLMockIBusinessPrincipal_Tests.TestReadXML() in C:\Projects\MAS Applications\Experimental\Source\DemoSerializationExceptionMock\DemoSerializationExceptionMock\ReadXMLMockIBusinessPrincipal_Tests.vb:line 43
Imports Microsoft.VisualStudio.TestTools.UnitTesting.WebImports Microsoft.VisualStudio.TestTools.UnitTestingImports Telerik.JustMockImports System.Security.Principal<TestClass()> _Public Class ReadXMLMockIBusinessPrincipal_Tests Private testContextInstance As TestContext Public Property TestContext As TestContext Get Return testContextInstance End Get Set(ByVal Value As TestContext) testContextInstance = Value End Set End Property <TestInitialize()> Public Sub TestInit() Dim idnty As IIdentity = Mock.Create(Of IIdentity)() Mock.Arrange(Function() idnty.AuthenticationType).Returns("MOCK") Mock.Arrange(Function() idnty.IsAuthenticated).Returns(True) Mock.Arrange(Function() idnty.Name).Returns("mockident") Dim prince As IPrincipal = Mock.Create(Of IPrincipal)() Mock.Arrange(Function() prince.Identity).Returns(idnty) Mock.Arrange(Function() prince.IsInRole(Arg.AnyString())).Returns(True) System.Threading.Thread.CurrentPrincipal = prince End Sub Dim elem As XElement = <Root> </Root> <TestMethod()> _ Public Sub TestReadXML_IgnoreSchema() Dim ds As New DataSet ds.ReadXml(New IO.StringReader(elem.ToString), XmlReadMode.IgnoreSchema) '<- Passed End Sub <TestMethod()> _ Public Sub TestReadXML() Dim ds As New DataSet ds.ReadXml(New IO.StringReader(elem.ToString)) '<-Fails End SubEnd Class 
Mock.Arrange(() => Membership.Provider).Returns(fakeProvider);
public ActionResult Login(AccountLogin accountLogin) if (!ModelState.IsValid) { return View(accountLogin); } CustomMembershipProvider membershipProvider = Membership.Provider as CustomMembershipProvider; MembershipUser user = membershipProvider.GetUser(accountLogin.UserName); if (user != null && user.LastLoginDate.AddDays(180) < DateTime.Now)
{
membershipProvider.LockUser(user.UserName); ModelState.AddModelError("", inactivityLockedMessage); return View(accountLogin); } if (Membership.ValidateUser(accountLogin.UserName, AESCryptography.Encrypt(accountLogin.Password))) { // store single session ID user.Comment = Guid.NewGuid().ToString(); Membership.UpdateUser(user); public void Login_Where_ModelState_IsNot_Valid_test() //this unit test passes with no issue
{ var target = new AccountController(); var accountLogin = new AccountLogin(); var result = new ViewResult(); Mock.Arrange(() => target.Login(accountLogin)).OccursOnce(); //to make target.ModelState.IsValid return false target.ModelState.AddModelError("key", "needs to be false"); result = (ViewResult)target.Login(accountLogin); Assert.IsTrue(target.ModelState.IsValid == false); Assert.IsTrue(result.ViewName == string.Empty); Mock.Assert(target.Login(accountLogin)); }
[TestMethod]
public void Login_Where_Inactivity_is_Hit_test() { string inactivityLockedMessage = "Your account is locked due to inactivity. Please contact AI Portal support."; //Arrange controller = Mock.Create<AccountController>(); accountLogin = new AccountLogin { UserName = "" } //string.empty; action = Mock.Create<ActionResult>();
Mock.Arrange(() => controller.ModelState.IsValid).Returns(true); CustomMembershipProvider fakeProvider = Mock.Create <CustomMembershipProvider>(); MembershipUser user = Mock.Create<MembershipUser>(); bool called = false;
try { Mock.ArrangeSet(() => action = controller.Login(Arg.IsAny<AccountLogin>())) .DoInstead(() => { Mock.ArrangeSet(() => user.LastLoginDate.AddDays(180)); Mock.Arrange(() => user.LastLoginDate < DateTime.Now).Returns(true); controller.ModelState.AddModelError("", inactivityLockedMessage); called = true; }) .Returns(action); } catch (NullReferenceException) { Mock.Arrange(() => fakeProvider.LockUser(accountLogin.UserName)).Returns(true); Mock.ArrangeSet(() => user.LastLoginDate.AddDays(180)); Mock.Arrange(() => user.LastLoginDate < DateTime.Now).Returns(true); controller.ModelState.AddModelError("", inactivityLockedMessage); called = true; } //Assert Mock.Assert(user.LastLoginDate); Mock.Assert(fakeProvider); Assert.IsTrue(called); Assert.IsFalse(controller.ModelState.IsValid); Assert.IsTrue(controller.ModelState.Count==1, "should not be more than 1 error"); string modelerror = controller.ModelState[""].Errors[0].ErrorMessage; Assert.IsTrue(inactivityLockedMessage==modelerror, "should be equal"); }
I'm having trouble mocking File.WriteAllBytes. Here's my test code:
var called = false;var ccr = new Ccr { Pdf = new byte[73], SubmissionId = 3 };Mock.Replace<string, byte[]>((s, b) => File.WriteAllBytes(s, b)).In<CcrFileWriter>(x => x.WriteToDisk(ccr));Mock.Arrange(() => File.WriteAllBytes(null, null)).IgnoreArguments().DoInstead(()=> called = true);var writer = new CcrFileWriter();writer.WriteToDisk(ccr);Assert.IsTrue(called);It's not working. It's not bypassing File.WriteAllBytes and the test fails.
Maybe I'm not understanding how this should work?

IEnumerable<byte> passedMessage1 = new byte[16]; Mock.Arrange(() => MessageOperationsMock.InsertNetworkAddressIntoMessage (Target.PrimaryReportingAddress, passedMessage1, 3)) .DoNothing() .Returns(passedMessage1) .OccursOnce(); Mock.Arrange(() => MessageOperationsMock.InsertNetworkAddressIntoMessage (Target.AlternateReportingAddress, passedMessage1, 25)) .DoNothing() .Returns(passedMessage1) .OccursOnce(); Target.PrimaryReportingAddress = LocalTestScenarios.TestIPAddress1; Target.AlternateReportingAddress = LocalTestScenarios.TestIPAddress2; Target.InsertNetworkAddressesIntoPart(passedMessage1); Mock.Assert(MessageOperationsMock);internal virtual IEnumerable<byte> InsertNetworkAddressesIntoPart(IEnumerable<byte> messageBeingCreated) { messageBeingCreated = MessageOperationsHelper.InsertNetworkAddressIntoMessage(PrimaryReportingAddress, messageBeingCreated, 3); messageBeingCreated = MessageOperationsHelper.InsertNetworkAddressIntoMessage(AlternateReportingAddress, messageBeingCreated, 25); return messageBeingCreated; }protected HardCodedMonitoringSettingsEntity Target; protected IDependencyInjection InjectorMock; protected IValidationOperations ValidatorMock; protected IMessageOperations MessageOperationsMock; [SetUp] public void InitializeBase() { Target = Mock.Create<HardCodedMonitoringSettingsEntity>(Behavior.CallOriginal); InjectorMock = Mock.Create<IDependencyInjection>(); ValidatorMock = Mock.Create<IValidationOperations>(); MessageOperationsMock = Mock.Create<IMessageOperations>(); Target.DependencyInjector = InjectorMock; Target.ValidationOperationsHelper = ValidatorMock; Target.MessageOperationsHelper = MessageOperationsMock; }