我在使用Moq的testing中有一些代码: public class Invoice { … public bool IsInFinancialYear(FinancialYearLookup financialYearLookup) { return InvoiceDate >= financialYearLookup.StartDate && InvoiceDate <= financialYearLookup.EndDate; } … } 所以在unit testing中,我试图嘲笑这个方法,并使其返回true mockInvoice.Setup(x => x.IsInFinancialYear()).Returns(true); 有没有反正写这一行,所以我不必指定inputIsInFinancialYear 。 即。 所以它没有在代码中input参数是什么,它将返回真正的任何传递给它?
不知道我怎么能解决这个问题,试图做一个unit testing的方法“GetByTitle” 这是我的定义: public class ArticleDAO : GenericNHibernateDAO(IArticle, int>, IArticleDAO { public IArticle GetByTitle(string title) { IQuery query = Session.CreateQuery("…") return query.UniqueResult<IArticle>(); } } public interface IArticleDAO { IArticle GetByTitle(string title); } unit testing: [Test] public void can_load_by_title() { _mockDaoFactory.Setup(x => x.GetArticleDao()) .Returns(_mockArticleDao.Object); _mockArticleDao.Setup(x => x.GetByTitle("some title")) .Returns(article1.Object); _articleManager.LoadArticle("some title"); Assert.IsNotNull(_articleManager.Article); } 运行testing给我的错误: System.ArgumentException: Invalid […]
我正在testing一个Web API调用的服务的方法。 如果我也在本地运行Web服务(位于解决scheme中的另一个项目中),使用正常的HttpClient可以正常工作。 但是,当我检查我的更改时,构build服务器将无法访问Web服务,因此testing将失败。 我已经为unit testingdevise了一个解决方法,创build一个IHttpClient接口并实现我在应用程序中使用的版本。 对于unit testing,我使用模拟的asynchronouspost方法完成一个模拟版本。 这是我遇到问题的地方。 我想为这个特定的testing返回一个OK的HttpStatusResult 。 对于另一个类似的testing,我将返回一个不好的结果。 testing将运行,但永远不会完成。 它挂在等待。 我是新来的asynchronous编程,委托,Moq本身,我一直在search和谷歌一段时间学习新的东西,但我似乎无法摆脱这个问题。 这是我想要testing的方法: public async Task<bool> QueueNotificationAsync(IHttpClient client, Email email) { // do stuff try { // The test hangs here, never returning HttpResponseMessage response = await client.PostAsync(uri, content); // more logic here } // more stuff } 这是我的unit testing方法: [TestMethod] public […]
想象一下这个class级 public class Foo { private Handler _h; public Foo(Handler h) { _h = h; } public void Bar(int i) { _h.AsyncHandle(CalcOn(i)); } private SomeResponse CalcOn(int i) { …; } } Mo(q)cking处理程序在Foo的testing中,我将如何检查Bar()传递给_h.AsyncHandle ?
这是我的理解,我可以testing,如果我调用更高级别的方法,将发生方法调用,即: public abstract class SomeClass() { public void SomeMehod() { SomeOtherMethod(); } internal abstract void SomeOtherMethod(); } 我想testing,如果我打电话SomeMethod()那么我期望SomeOtherMethod()将被调用。 我是否正确地认为这种testing在模拟框架中是可用的?
我有一个接口声明 Task DoSomethingAsync(); 我正在使用MoqFramework进行testing: [TestMethod()] public async Task MyAsyncTest() { Mock<ISomeInterface> mock = new Mock<ISomeInterface>(); mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> }); … } 然后在我的testing中,我执行调用await DoSomethingAsync()的代码。 而testing只是在这一行失败。 我究竟做错了什么?
我有这样的testing: [TestCase("~/page/myaction")] public void Page_With_Custom_Action(string path) { // Arrange var pathData = new Mock<IPathData>(); var pageModel = new Mock<IPageModel>(); var repository = new Mock<IPageRepository>(); var mapper = new Mock<IControllerMapper>(); var container = new Mock<IContainer>(); container.Setup(x => x.GetInstance<IPageRepository>()).Returns(repository.Object); repository.Setup(x => x.GetPageByUrl<IPageModel>(path)).Returns(() => pageModel.Object); pathData.Setup(x => x.Action).Returns("myaction"); pathData.Setup(x => x.Controller).Returns("page"); var resolver = new DashboardPathResolver(pathData.Object, repository.Object, mapper.Object, […]
我有一个接口上的方法: string DoSomething(string whatever); 我想用MOQ来嘲弄这个,所以它返回所有传入的东西 – 例如: _mock.Setup( theObject => theObject.DoSomething( It.IsAny<string>( ) ) ) .Returns( [the parameter that was passed] ) ; 有任何想法吗?
我如何validation该方法是不是在Moq中调用? 它是否有像AssertWasNotCalled? 更新:从版本3.0开始,可以使用新的语法: mock.Verify(foo => foo.Execute("ping"), Times.Never());
我有一个集成testing,从第三方服务器抓取一些JSON结果。 这非常简单,效果很好。 我希望能够实际上停止使用这个服务器,并使用Moq (或任何Mocking库,比如ninject等)来劫持和强制返回结果。 这可能吗? 这是一些示例代码: public Foo GoGetSomeJsonForMePleaseKThxBai() { // prep stuff … // Now get json please. HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("Http://some.fancypants.site/api/hiThere); httpWebRequest.Method = WebRequestMethods.Http.Get; string responseText; using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { using (var streamReader = new StreamReader(httpWebResponse.GetResponseStream())) { json = streamReader.ReadToEnd().ToLowerInvariant(); } } // Check the value of the json… etc.. } […]