Class To TestSome methods hidden for claritynamespace RiPS.Infrastructure.UA{    public class UAWorkflowManager    {        private readonly IContextIOAPI _api;        private readonly IUAjoinedRepo _dbJoinedRepo;        private readonly IRemindersSystem _remindersSystem;        public UAWorkflowManager(IContextIOAPI contextIOAPI, IUAjoinedRepo uAjoinedRepo, IRemindersSystem remindersSystem)        {            _api = contextIOAPI;            _dbJoinedRepo = uAjoinedRepo;            _remindersSystem = remindersSystem;        }        public bool Assign(MongoUAJoinedWorkflow wf,string username, IUAWorkflowHub hub)        {                if (String.IsNullOrEmpty(wf.UA))                {                    hub.Error(Assignment Error, Must have UA to assign);                    return false;                }                if (wf.TaskReqs.Count < 1)                {                    hub.Error(Assignment Error, Must have tasks);                    return false;                }                foreach (var req in wf.TaskReqs)                {                    if (String.IsNullOrEmpty(req.Note))                    {                        hub.Error(Assignment Error, All Tasks must have notes);                        return false;                    }                    if (String.IsNullOrEmpty(req.Title))                    {                        hub.Error(Assignment Error, All Tasks must have titles. Must be an error  );                        return false;                    }                }                wf.Assigned = true;                wf.AssignedBy = username;                wf.AssignedDate = DateTime.UtcNow;                var msg = GenerateMessage(wf);                msg.Body = RenderViewToString(wf);                var str = CreateStream(wf, hub);                var fileName = str.Item1;                var stream = str.Item2;                AttachMessage(msg, stream, fileName);                hub.Info(Assigning, Sending Email);                RetryUtility.RetryAction(() => SendMessage(msg));                stream.Position = 0;                hub.Info(Task, adding);                foreach (var taskReq in wf.TaskReqs)                {                   var r = _remindersSystem.AddReminder(new MongoReminder(wf.clientId, wf.policyId, wf.UA, UAWF, taskReq.DueDate, taskReq.Title), stream, fileName);                   wf.ReminderGuids.Add(r.Id);                       stream.Position = 0;                }                _dbJoinedRepo.Save(wf);                hub.Info(Task, added);                hub.Info(Assigning, Moving Email To Assigned Folder);                RetryUtility.RetryAction(() => MoveToFolder(wf.MessageId, Assigned));                hub.Info(Assigning, Saving Assignment to Database);                wf.Error = ;                hub.Update(wf);                hub.Success(Assigned, wf.Subject);                return true;        }    }}   Test Class (nUnit & Moq)namespace RiPSTests{    [TestFixture]    public class UAWF    {        private Mock<IContextIOAPI> mock;        private Mock<IUAjoinedRepo> repoMock;        private Mock<IUAWorkflowHub> hubMock;        private Mock<IRemindersSystem> reminderMock;        private const string ConstSampleUA = FAKEUA;        private const string ConstSampleNote = FAKENote;        private const string ConstSampleTitle = FAKETitle;        [SetUp]        public void setup()        {            mock = new Mock<IContextIOAPI>();            repoMock = new Mock<IUAjoinedRepo>();            hubMock = new Mock<IUAWorkflowHub>();            reminderMock = new Mock<IRemindersSystem>();        }        [Test]        public void CanSetup()        {            var man = new UAWorkflowManager(mock.Object, repoMock.Object, reminderMock.Object);            Assert.NotNull(man);        }        [Test]        public void FailMustHaveUA()        {            //Arrange             var man = new UAWorkflowManager(mock.Object, repoMock.Object, reminderMock.Object);            var wf = new MongoUAJoinedWorkflow();            //Act            var res = man.Assign(wf, ConstSampleUA, hubMock.Object);            //Assert            Assert.IsFalse(res);            hubMock.Verify(z => z.Error(Assignment Error, Must have UA to assign), Times.Exactly(1));        }        [Test]        public void FailMustHaveTasks()        {            //Arrange             var man = new UAWorkflowManager(mock.Object, repoMock.Object, reminderMock.Object);            var wf = new MongoUAJoinedWorkflow()            {                UA = ConstSampleUA            };            //Act            var res = man.Assign(wf, ConstSampleUA, hubMock.Object);            //Assert            Assert.IsFalse(res);            hubMock.Verify(z => z.Error(Assignment Error, Must have tasks), Times.Exactly(1));        }        [Test]        public void FailTasksMustHaveNote()        {            //Arrange             var man = new UAWorkflowManager(mock.Object, repoMock.Object, reminderMock.Objects);            var wf = new MongoUAJoinedWorkflow()            {                UA = ConstSampleUA,                TaskReqs =  new List<TaskReq>()                {                    new TaskReq()                    {                        DueDate = DateTime.Today,                        Title = ConstSampleTitle                    }                }            };            //Act            var res = man.Assign(wf, ConstSampleUA, hubMock.Object);            //Assert            Assert.IsFalse(res);            hubMock.Verify(z => z.Error(Assignment Error, All Tasks must have notes), Times.Exactly(1));        }    }}Test feel awfully verbose and brittle.  Writing Tests Second (Need to do some overhaul and was unable to test the first time because i am not a strong tester)
Multiple Services and Test Setup
c#;unit testing;moq;nunit