javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

c#-最小起订量-如何验证是否通过s设置了属性值

考虑此类:

public class Content
{      
   public virtual bool IsCheckedOut {get; private set;}
   public virtual void CheckOut()
   {
      IsCheckedOut = true;
   }

   public virtual void CheckIn()
   {
      //Do Nothing for now as demonstrating false positive test.
   }
}

Checkin方法有意为空。 现在,我有一些测试方法来验证调用每个方法的状态。

[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
    Content c = new Content();    
    c.CheckOut();
    Assert.AreEqual(true, c.IsCheckedOut); //Test works as expected
}

[TestMethod]
public void CheckInSetsCheckedOutStatusToFalse()
{
    Content c = new Content();
    c.CheckIn();
    Assert.AreEqual(false, c.IsCheckedOut); //Test does not work as expected
}

由于错误原因,第二次测试通过。 那么,如何使用模拟(moq)来验证CheckIn设置了IsCheckedOut属性?

谢谢。

编辑

需要说明的是:我有一个称为CheckIn()的方法,其作用是将IsCheckedOut状态设置为false。

您将在上面的测试代码中看到,即使我未将属性值设置为false,测试也将返回false。 这是预料之中的,这里没有错。

我认为我的问题特别是如何验证Check In()方法是否已将IsChecked Out属性设置为false? 这就是我所说的行为验证。

我相信某些评论建议做一些等同于状态验证的事情? 如果是这样,我不相信在我们可以简单使用的情况下完全嘲笑这一部分没有任何价值:

Content c = new Content();    
c.CheckIn();    
Assert.AreEqual(false, c.IsCheckedOut); //State verification

当然我可能是错的,所以请帮助我阐明这些概念:)

trans by 2020-08-12T01:17:35Z

c#-用moq模拟静态属性

我刚开始使用最小起订量。 我正在为static创建一些单元测试用例,并且一切正常,直到我按如下所示命中了HttpRuntime.AppDomainAppVirtualPath属性

this.applicationPath = (HttpRuntime.AppDomainAppVirtualPath.Length > 1) ? HttpRuntime.AppDomainAppVirtualPath : String.Empty;

我不知道如何为static类和属性创建模拟,例如HttpRuntime.AppDomainAppVirtualPathcontextrequestresponse已经很好地模拟了我从最小订量中得到的示例代码。 如果有人可以帮助我,我将不胜感激。

trans by 2020-08-09T21:24:40Z

CodeGo.net>如何模拟moq Controller.User

我有几个ActionMethods来查询Controller.User的角色,如下所示

bool isAdmin = User.IsInRole("admin");

在那种情况下方便地行动。

我开始用这样的代码对这些方法进行测试

[TestMethod]
public void HomeController_Index_Should_Return_Non_Null_ViewPage()
{
    HomeController controller  = new HomePostController();
    ActionResult index = controller.Index();

    Assert.IsNotNull(index);
}

并且该测试失败,因为未设置Controller.User。任何想法?

trans by 2020-08-08T20:01:37Z

CodeGo.net>如何将项目添加到模拟DbSet(使用最小起订量)

我正在尝试建立一个模拟DbSet进行测试。 我在这里使用了该教程,[http://www.loganfranken.com/blog/517/mocking-dbset-queries-in-ef6/]并对其进行了一些修改,因此每次调用GetEnumerator都会返回一个新的枚举数(另一个问题是 有)。 但是,我很难将项目添加到DbSet中。

输出为preCount = 3 postCount =3。但是,我希望它是precount = 3 postCount =4。非常感谢您的帮助。

static void Main(string[] args)
    {
        Debug.WriteLine("hello debug");

        List<string> stringList = new List<string>
        {
            "a", "b", "c"
        };

        DbSet<string> myDbSet = GetQueryableMockDbSet(stringList);
        int preCount = myDbSet.Count();
        myDbSet.Add("d");
        int postCount = myDbSet.Count();
        Debug.WriteLine("preCount = " + preCount + " postCount = " + postCount);
    }

    private static DbSet<T> GetQueryableMockDbSet<T>(List<T> sourceList) where T : class
    {
        var queryable = sourceList.AsQueryable();

        var dbSet = new Mock<DbSet<T>>();
        dbSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(queryable.Provider);
        dbSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(queryable.Expression);
        dbSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(queryable.ElementType);
        dbSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator());

        return dbSet.Object;
    }
trans by 2020-08-02T03:46:32Z

C#-模拟新的Microsoft Entity Framework Identity UserManager和RoleManag

有没有人为UserManagerRoleManager提出成功的模拟解决方案? 我整天都在撞墙。 我要做的就是模拟对象以使用内存中的集合,而不是访问Entity Framework数据存储。 我搜寻了互联网,并尝试了使用最小起订量的几种不同方法。

我的印象是,新东西更容易测试。 我想念什么吗?

trans by 2020-07-31T23:30:21Z

单元测试-用moq模拟虚拟只读属性

尽管可以手动完成,但我找不到方法,所以为什么不使用最小起订量呢?

trans by 2020-07-29T00:49:10Z

c#-用Moq调用原始方法

我有一个具有2个方法GetAllProducts和GetProductByType的ProductRepository,我想测试GetProductByType的逻辑。 在内部,GetProductByType调用GetAllProducts,然后过滤正确的对象。

public virtual IEnumerable<Product> GetAllProducts()
{
    //returns all products in memory, db etc
}

public virtual IEnumerable<Product> GetProductsByType(string type)
{
    return (from p in GetAllProducts() where p.Type == type select p).ToList();
}

因此,在我的测试中,我想模拟对GetAllProducts的调用,以便它返回在我的测试中定义的产品列表,然后调用原始的GetProductsByType,它将使用模拟的GetAllProducts。

我正在尝试类似以下代码的操作,但是未执行原始的GetProductByType,它也已被模拟。 在TypeMock中,我有一个CallOriginal方法可以解决此问题,但是我无法通过Moq弄清楚。 有任何想法吗?

var mock = new Mock<ProductRepository>();
mock.Setup(r => r.GetAllProducts()).Returns(new List<Product>() {p1, p2, p3});
var result = mock.Object.GetProductsByType("Type1");
Assert.AreEqual(2, result.Count());
trans by 2020-07-26T13:59:27Z

C#-需要帮助以了解Moq b

我一直在查看Moq文档,但是注释太短了,以至于我无法理解它可以做的每件事。

我不明白的第一件事是m

使用此功能而不是仅仅输入一些值是否有优势? 我知道人们会说如果您不关心值就使用它,但是如果您不关心值,就不能只做一个“ a”之类的事情吗? 这似乎更像打字。

其次,什么时候成为您不关心价值的榜样? 我以为Moq需要值来匹配东西。

我根本不了解m的用途或使用方法。 我不理解该示例及其试图显示的内容。

接下来,我不知道何时使用m(及其SetupSet方法和类似方法)。 您为什么要限制设置内容的次数? 我有一些SetupSet值,我需要使用两次。 我为什么要限制一次呢? 这只会使测试失败。 这是在阻止其他人向您的代码中添加其他代码吗?

我不知道如何使用m它用什么来设置属性?

我也不明白为什么有这么多不同的方式来设置属性以及它们之间的区别是什么。 该文档具有:

SetupGet(of property)
SetupGet<TProperty>

我注意到Moq中的许多内容显示mSetupSet-它们之间有什么区别,使用时它们看起来像什么?

我也不明白他们为什么有m。您是否不使用SetupSet来设置属性?SetupSet在文档中有五种不同的使用方式。 再加上一个SetupProperty。所以我不明白为什么会有这么多。

从侧面讲,我想知道lambda中使用的变量是否独立于其他lambda。 例如。:

mock.setup(m => m.Test);
stop.setup(m => m.Test);

可以吗,或者变量m之间是否会有冲突?

最后,我正在观看此视频,我想知道它是否显示Visual Studio。 他的Intellisense看起来与众不同。 一个灯泡为他突然冒出(我不高兴,因为它带回了人们对Netbeans的痛苦回忆),并且从一个打开的大括号到关闭的大括号等等都有行。

谢谢 :)

trans by 2020-07-25T16:13:54Z

单元测试-Moq中的VerifyAll()的用途是什么?

我在Moq中阅读了Verifiable()的目的是什么? 并且在我的脑海里有这个问题。 需要您的帮助来说明这一点。

trans by 2020-07-24T21:41:23Z

模拟-Moq和Rhino.mocks的功能是什么?

我找不到Moq和Rhino的逐项特征比较。 所有的问题都是“您更喜欢哪个,为什么?”,或者“这是您如何在犀牛中进行简单的模拟以及如何在最小定量中完成”。

我无法在任何地方找到深入的比较。 我知道语法上的差异,因此我没有在寻找答案。 我正在寻找功能比较。 例如:

  • Rhino的线程具有Expect.On()嘲笑。 Moq可以这样做吗?

  • 那么多模拟(实现多个接口一个模拟)。 Moq可以这样做吗?

  • 我相信Moq现在可以嘲笑受保护的成员。 Rhino可以这样做吗?

编辑:我最终也查看了其他一些.Net框架。

trans by 2020-07-24T15:41:23Z

asp.net mvc-如何使用Moq模拟会话对象集合

我正在使用shanselmann的MvcMockHelper类使用Moq模拟一些HttpContext的东西,但是我遇到的问题是能够在我的MVC控制器中为模拟的会话对象分配一些东西,然后能够在我的单元测试中读取相同的值以进行验证 目的。

我的问题是如何为模拟的会话对象分配存储集合,以允许诸如session [“ UserName”] =“ foo”之类的代码保留“ foo”值,并使其在单元测试中可用。

trans by 2020-07-22T18:10:16Z

c#-任务最少的最小起订量

由于我已将WCF方法转换为Async,因此我的单元测试失败了,并且我无法找出正确的语法来使其正常工作。

客户代理类

 public interface IClientProxy
{
     Task DoSomething(CredentialDataList credentialData, string store);
}

服务等级

  public class CredentialSync : ICredentialSync
{
    private ICredentialRepository _repository;

    private IClientProxy _client;

    public CredentialSync()
    {
        this._repository = new CredentialRepository();
        this._client = new ClientProxy();
    }

    public CredentialSync(ICredentialRepository repository, IClientProxy client)
    {
        this._repository = repository;
        this._client = client;
    }

   public async Task Synchronise(string payrollNumber)
    {
        try
        {
            if (string.IsNullOrEmpty(payrollNumber))
            {
                .... some code
              }
            else
            {
                CredentialDataList credentialData = new CredentialDataList();
                List<CredentialData> credentialList = new List<CredentialData>();

                // fetch the record from the database
                List<GetCredentialData_Result> data = this._repository.GetCredentialData(payrollNumber);
                var pinData = this._repository.GetCredentialPinData(payrollNumber);

                // get the stores for this employee
                var storeList = data.Where(a => a.StoreNumber != null)
                    .GroupBy(a => a.StoreNumber)
                    .Select(x => new Store { StoreNumber = x.Key.ToString() }).ToArray();

                var credential = this.ExtractCredentialData(data, pinData, payrollNumber);

                credentialList.Add(credential);
                credentialData.CredentialList = credentialList;

                foreach (var store in storeList)
                {       
                  //this line causes an Object reference not set to an instance of an object error
                   await  _client.DoSomething(credentialData, store.StoreNumber);

                }
            }
        }
        catch (Exception ex)
        {
            throw new FaultException<Exception>(ex);
        }
    }

测试班

 /// </summary>
[TestClass]
public class SynchTest
{

    private Mock<ICredentialRepository> _mockRepository;
    private Mock<IClientProxy> _mockService;

    [TestInitialize]
    public void Setup()
    {
       ... some setups for repository which work fine
    }

[TestMethod]      
    public async Task SynchroniseData_WithOneEmployee_CallsReplicateService()
    {
        this._mockService = new Mock<IClientProxy>();
        this._mockService.Setup(x=>x.DoSomething(It.IsAny<CredentialDataList>(), It.IsAny<string>()));
        // arrange
        string payrollNumber = "1";
        CredentialSync service = new CredentialSync(this._mockRepository.Object, this._mockService.Object);

        // act
        await service.Synchronise(payrollNumber);

        // assert                 
        this._mockService.VerifyAll();
    }

错误是在ClientProxy.DoSomething被调用时:

你调用的对象是空的

参数都很好。

如果我将ClientProxy.DoSomething方法转换为同步方法(public void DoSomething(...))代码可以正常工作,但是我确实需要异步调用此代码

trans by 2020-07-20T17:08:59Z

nunit-使用验证来确认Moq模拟类中的预期参数值

我正在尝试验证是否使用预期的对象参数调用了模拟中的方法。 我正在使用Moq,nUnit,并认为AutoFixture的“相似度”应该可以完成工作。以下是我正在尝试做的简化版本。

有没有办法用AutoFixture做到这一点? 有没有更好的方法来验证是否使用适当的参数调用了A

覆盖A类中的Equals以比较属性值,并将Verify行更改为:

barMock.Verify(m => m.Something(a));

通过,但是我不想在我的项目中像A这样的每个类中都覆盖Equals。

namespace Test
{
    using Moq;
    using NUnit.Framework;
    using Ploeh.SemanticComparison.Fluent;

    public class A
    {
        public int P1 { get; set; }
    }
    public interface IBar
    {
        void Something(A a);
    }

    public class Foo
    {
        public A Data { get; private set; }
        public void DoSomethingWith(IBar bar)
        {
            Data = new A { P1 = 1 };
            bar.Something(Data);
        }
    }

    [TestFixture]
    public class AutoFixtureTest
    {
        [Test]
        public void TestSample()
        {
            var foo = new Foo();
            var barMock = new Mock<IBar>();
            var a = new A { P1 = 1 };
            var expectedA = a.AsSource().OfLikeness<A>();

            foo.DoSomethingWith(barMock.Object);

            expectedA.ShouldEqual(foo.Data);   // passes
            barMock.Verify(m => m.Something(expectedA.Value));  // fails
        }
    }
}
trans by 2020-07-10T06:07:40Z

c#-模拟任何给定类型参数的泛型方法调用

我有一个界面

public interface IDataProvider
{
    T GetDataDocument<T>(Guid document) where T:class, new()
}

我想以某种方式对其进行模拟,即它将返回给定类型的新实例,而不管确切的类型如何,例如:

myMock.Setup(m => m.GetDataDocument<It.IsAny<Type>()>(It.IsAny<Guid>()))
.Returns(() => new T());

(这当然是行不通的,因为我不能只给moq提供任何类型参数,而且我不知道必须返回哪种类型。

关于这个有什么想法吗?

trans by 2020-07-04T13:06:47Z

c#-模拟更新方法,返回的最小起订量为空

在我的测试中,我将IUser定义为包含一些记录的数据。

我想设置一个最小的方法IUser,此方法接收用户LastNamestring进行更新。

然后我得到IUser并更新属性LastName

我尝试了这个:

namespace Tests.UnitTests
{
    [TestClass]
    public class UsersTest
    {
        public IUsers MockUsersRepo;
        readonly Mock<IUsers> _mockUserRepo = new Mock<IUsers>();
        private List<IUser> _users = new List<IUser>();

        [TestInitialize()]
        public void MyTestInitialize()
        {
            _users = new List<IUser>
                {
                    new User { Id = 1, Firsname = "A", Lastname = "AA", IsValid = true },
                    new User { Id = 1, Firsname = "B", Lastname = "BB", IsValid = true }
                };

            Mock<IAction> mockUserRepository = new Mock<IAction>();
            _mockUserRepo.Setup(mr => mr.Update(It.IsAny<int>(), It.IsAny<string>()))
                .Returns(???);

            MockUsersRepo = _mockUserRepo.Object;
        }

        [TestMethod]
        public void Update()
        {
            //Use the mock here
        }

    }
}

但我收到此错误:无法解析返回符号

你有身份证吗?

class User : IUser
{
    public int Id { get; set; }
    public string Firsname { get; set; }
    public string Lastname { get; set; }
    public bool IsValid { get; set; }
}

interface IUser
{
    int Id { get; set; }
    string Firsname { get; set; }
    string Lastname { get; set; }
    bool IsValid { get; set; }
}

interface IAction
{
    List<IUser> GetList(bool isActive);
    void Update(int id, string lastname)
}

class Action : IAction
{
    public IUser GetById(int id)
    {
        //....
    }
    public void Update(int id, string lastname)
    {
        var userToUpdate = GetById(id);
        userToUpdate.LastName = lastname;
        //....
    }
}
trans by 2020-07-04T01:52:39Z

c#-使用参数数组的设置方法

我正在为应用程序开发测试。 有一种方法具有2931236958670170160896数组作为参数。 我已经使用Moq设置了该方法,但是当我运行测试时,该方法的返回值为null,这意味着它没有被模拟。

这是一个代码示例:

public interface ITicketManager {
    string GetFirstTicketInQueueIfMatches(params string[] ticketsToMatch);
}

public class TicketManager : ITicketManager {
    private Queue<string> ticketQueue = new Queue<string>();

    public string GetFirstTicketInQueueIfMatches(params string[] ticketsToMatch) {
        var firstQueuedTicket = ticketQueue.Peek();
        var firstQueuedTicketMatchesAnyOfRequested = ticketsToMatch.Any(t => t == firstQueuedTicket);

        if(firstQueuedTicketMatchesAnyOfRequested)
            return firstQueuedTicket;

        return null;
    }
}

模拟代码如下所示:

var mock = new Mock<ITicketManager>();

mock.Setup(m => m.GetFirstTicketInQueueIfMatches(It.IsAny<string>()))
    .Returns(p => { 
    if(p.Contains("A"))
            return "A";

    return null;
});

为什么它从来没有碰过嘲笑的方法?

trans by 2020-06-20T11:37:35Z

CodeGo.net>如何模拟实现多个接口的类

如何模拟以下类:

UserRepository : GenericRepository<User>, IUserRepository


public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class

我使用的是Moq,我很困惑如何正确处理多个接口。

trans by 2020-06-20T04:36:54Z

单元测试-MVC 3:如何学习如何使用NUnit,Ninject和Moq进行测试?

我的问题的简短版本:

  1. 谁能指出我一些好的详细资料来源,可以使用了解如何在我的MVC 3应用程序中实施测试NUnit,Ninject 2和Moq?
  2. 任何人都可以帮我澄清一下控制器库解耦,模拟和依赖注入一起工作?

我的问题的较长版本:

我正在尝试做的...

我目前正在开始创建MVC 3应用程序,该应用程序将使用Entity Framework 4和数据库优先方法。 我想做正确的事,所以我试图将类,层等设计为高度可测试的。 但是,除了对单元测试或集成测试的学术了解之外,我几乎没有经验。

经过大量研究,我决定继续使用

  • NUnit作为我的测试框架
  • Ninject 2作为我的依赖项注入框架
  • Moq作为我的模拟框架。

我知道哪个框架是最好的主题等可以加入,但是到目前为止,我对任何一个框架的了解还不足以形成一个坚实的意见。 因此,我决定使用这些免费的解决方案,这些解决方案似乎广受欢迎并且维护良好。

到目前为止我学到的...

我花了一些时间来研究其中的一些内容,例如阅读以下资源:

  • 在仓库中实现存储库和工作单元单元ASP.NET MVC应用程序
  • 构建可测试的ASP.NET MVC应用程序
  • NerdDinner步骤12:单元测试
  • 在实体框架中使用存储库和工作单元模式4.0

从这些资源中,我设法满足了对存储库模式的需求,该模式具有存储库接口,以使控制器和数据访问逻辑脱钩。 我已经在应用程序中写了一些代码,但是我承认我不清楚整个过程的机制,以及我是否在进行这种分离以支持模拟,依赖注入或两者兼而有之。 因此,我当然也不会介意你们的消息。 在这一点上我能获得的任何清晰度都将对我有所帮助。

哪里让我感到困惑...

我以为我已经很好地掌握了这些东西,直到我开始尝试围绕Ninject缠住我的头,如上面引用的“构建可测试的ASP.NET MVC应用程序”中所述。 具体来说,我完全迷失了作者开始描述Service层实现的时间,大约是文档的一半。

无论如何,我现在正在寻找更多的资源来研究,以便尝试对这些东西有不同的看法,直到对我有意义为止。

总结所有这些,将其归结为具体问题,我想知道以下几点:

  1. 谁能指出我一些好的详细资料来源,可以使用了解如何在我的MVC 3应用程序中实施测试NUnit,Ninject 2和Moq?
  2. 任何人都可以帮我澄清一下控制器库解耦,模拟和依赖注入一起工作?

编辑:

我刚刚在Github上发现了Ninject官方Wiki,所以我将开始研究它,看看它是否开始为我澄清事情。 但是,我仍然对SO社区对所有这些方面的想法非常感兴趣:)

trans by 2020-02-15T16:42:09Z

CodeGo.net>模拟方法抛出异常(最小起订量),但其他行为像被嘲笑的对象?

我有一个NUnit类,简化后看起来像这样:

public class Transfer
{
    public virtual IFileConnection source { get; set; }
    public virtual IFileConnection destination { get; set; }

    public virtual void GetFile(IFileConnection connection, 
        string remoteFilename, string localFilename)
    {
        connection.Get(remoteFilename, localFilename);
    }

    public virtual void PutFile(IFileConnection connection, 
        string localFilename, string remoteFilename)
    {
        connection.Get(remoteFilename, localFilename);
    }

    public virtual void TransferFiles(string sourceName, string destName)
    {
        source = internalConfig.GetFileConnection("source");
        destination = internalConfig.GetFileConnection("destination");
        var tempName = Path.GetTempFileName();
        GetFile(source, sourceName, tempName);
        PutFile(destination, tempName, destName);
    }
}

NUnit接口的简化版本如下所示:

public interface IFileConnection
{
    void Get(string remoteFileName, string localFileName);
    void Put(string localFileName, string remoteFileName);
}

真正的类应该处理Transfer具体类在与远程主机失去连接,发送电子邮件或不发送消息时引发的NUnit

我想使用Moq创建NUnit类,并在所有属性和方法中将其用作我的具体Transfer类,但调用GetFile方法时除外-然后,我希望它引发System.IO.IOException并确保Transfer类可以处理它 正确地。

我在为工作使用正确的工具吗? 我要这样做正确吗? 我将如何为NUnit编写该单元测试的设置?

trans by 2020-02-11T22:24:15Z

c#-最小起订量,严格vs宽松usag

过去,我只使用Rhino Mocks,并使用典型的严格模拟。 我现在正在与Moq合作进行一个项目,我想知道正确的用法。

假设我有一个对象Foo及其Bar方法,该对象对对象Buzz调用了Bizz方法。

在测试中,我想验证是否调用了Bizz,因此我觉得有两种可能的选择:

严格的模拟

var mockBuzz= new Mock<IBuzz>(MockBehavior.Strict);
mockBuzz.Setup(x => x.Bizz()); //test will fail if Bizz method not called
foo.Buzz = mockBuzz
foo.Bar();
mockBuzz.VerifyAll();

用一个宽松的模拟

var mockBuzz= new Mock<IBuzz>();    
foo.Buzz = mockBuzz
foo.Bar();
mockBuzz.Verify(x => x.Bizz()) //test will fail if Bizz method not called

是否有标准或正常的方式来做到这一点?

trans by 2020-02-05T05:39:57Z

1 2 3 下一页 共3页