public void CreateCrmAccount2() { //ARRANGE - set up everything our test needs //first - set up a mock service to act like the CRM organization service var serviceMock = new Mock <IOrganizationService>(); IOrganizationService service = serviceMock.Object; //next - set a name and account number for our fake account record to create string accountName = "Lucas Demo Company"; string accountNumber = "LPA1234"; //next - create a guid that we want our mock service Create method to return when called Guid idToReturn = Guid.NewGuid(); //next - create an object that will allow us to capture the account object that is passed to the Create method Entity createdAccount = new Entity(); //next - create an entity object that will allow us to capture the task object that is passed to the Create method Entity createdTask = new Entity(); //next - create an mock account record to pass back to the Retrieve method Entity mockReturnedAccount = new Entity("account"); mockReturnedAccount["name"] = accountName; mockReturnedAccount["accountnumber"] = accountNumber; mockReturnedAccount["accountid"] = idToReturn; mockReturnedAccount.Id = idToReturn; //finally - tell our mock service what to do when the CRM service methods are called //handle the account creation serviceMock.Setup(t => t.Create(It.Is <Entity>(e => e.LogicalName.ToUpper() == "account".ToUpper()))) //only match an entity with a logical name of "account" .Returns(idToReturn) //return the idToReturn guid .Callback <Entity>(s => createdAccount = s); //store the Create method invocation parameter for inspection later //handle the task creation serviceMock.Setup(t => t.Create(It.Is <Entity>(e => e.LogicalName.ToUpper() == "task".ToUpper()))) //only match an entity with a logical name of "task" .Returns(Guid.NewGuid()) //can return any guid here .Callback <Entity>(s => createdTask = s); //store the Create method invocation parameter for inspection later //handle the retrieve account operation serviceMock.Setup(t => t.Retrieve( It.Is <string>(e => e.ToUpper() == "account".ToUpper()), It.Is <Guid>(e => e == idToReturn), It.IsAny <Microsoft.Xrm.Sdk.Query.ColumnSet>()) ) //here we match on logical name of account and the correct id .Returns(mockReturnedAccount); //ACT - do the thing(s) we want to test //call the CreateCrmAccount2 method like usual, but supply the mock service as an invocation parameter MockDemo.CreateCrmAccount2(accountName, service); //ASSERT - verify the results are correct //verify the entity created inside the CreateCrmAccount method has the name we supplied Assert.AreEqual(accountName, createdAccount["name"]); //verify task regardingobjectid is the same as the id we returned upon account creation Assert.AreEqual(idToReturn, ((Microsoft.Xrm.Sdk.EntityReference)createdTask["regardingobjectid"]).Id); Assert.AreEqual("Finish account set up for " + accountName + " - " + accountNumber, (string)createdTask["subject"]); }