小编Emi*_*ski的帖子

DbSet mock,第二次调用ToList时没有结果

我正在尝试模拟DbContext和DbSet.这适用于我之前的单元测试,但是当我的代码第二次在DbSet上调用ToList方法时出现问题.

首先,dbSet.ToList()返回模拟结果.第二个返回0个元素;

       var queryableData = new List<string>{ "a", "b", "c" }.AsQueryable();

        var mockDbSet = new Mock<DbSet<string>>();
        var q = mockDbSet.As<IQueryable<string>>();
        q.Setup(m => m.Provider).Returns(queryableData.Provider);
        q.Setup(m => m.Expression).Returns(queryableData.Expression);
        q.Setup(m => m.ElementType).Returns(queryableData.ElementType);
        q.Setup(m => m.GetEnumerator()).Returns(queryableData.GetEnumerator());

        DbSet<string> dbset = mockDbSet.Object;
        IQueryable<string> query = dbset;

        //RESULTS: abc
        var a1 = dbset.ToList();
        foreach (var a in a1)
            Console.Write(a);

        //NO RESULTS
        var a2 = dbset.ToList();
        foreach (var a in a2)
            Console.Write(a);
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net unit-testing entity-framework

18
推荐指数
1
解决办法
3515
查看次数

使用.NET程序集而不锁定dll文件

我有一个每天执行一次的Windows服务.这只是10分钟的行动.

我在网站的bin文件夹中构建服务的文件,因为该服务使用网站dll的.

不幸的是我注意到当我安装网站模块(网站安装程序的dotnetnuke .zip模块)时,我收到一个错误,该文件被antoher进程锁定.

在安装每个模块之前禁用服务是非常有问题的,所以我想让我的服务不能锁定其中使用的dll.

我读到了AppDomain和ShadowCopyFiles选项,但我不能让它们适合我.

这是我如何使用ShadowCopyFiles的示例:

class Program
{
    static string GenerateRandomName()
    {
        //maybe name must be unique?!
        var random = new Random();
        return "a" + random.Next().ToString() + "b" + random.Next();
    }

    static int RandomNumber()
    {
        var info = ConfigureAppDomainSettings();

        var domain = AppDomain.CreateDomain(GenerateRandomName(), null, info);
        var assembly = domain.Load("SharedLibrary");
        var shared = (SharedLibrary.IShared)assembly.CreateInstance("SharedLibrary.Shared");

        int retVal = shared.RandomNumber();

        AppDomain.Unload(domain);

        domain = null;
        assembly = null;
        shared = null;
        info = null;

        Console.WriteLine("before cleanning");
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
        GC.WaitForFullGCComplete();
        GC.Collect();
        Console.WriteLine("after …
Run Code Online (Sandbox Code Playgroud)

.net c# appdomain .net-assembly appdomainsetup

6
推荐指数
1
解决办法
1289
查看次数

xunit.net-double [,]比较

我的单元测试失败消息是:

Result Message: 
Assert.Equal() Failure
Position: First difference is at position 0
Expected: Double[,] { 0,888888888888889, 1,33333333333333, 1,33333333333333, 2,66666666666667 }
Actual:   Double[,] { 0,888888888888889, 1,33333333333333, 1,33333333333333, 2,66666666666667 }
Run Code Online (Sandbox Code Playgroud)

我知道,如果您比较双数,则必须指定精度,因此我的解决方法是:

Assert.Equal(_sA.ToArray(), result.ToArray(), new Comparer());

class Comparer : IEqualityComparer<double[,]>
{
    public bool Equals(double[,] x, double[,] y)
    {
        if (x.GetLength(0) != y.GetLength(0) || x.GetLength(1) != y.GetLength(1))
            return false;

        for (var i = 0; i < x.GetLength(0); ++i)
        {
            for(var j = 0; j < x.GetLength(1); ++j)
            if (!isEqual(x[i, j], y[i, j]))
                return false; …
Run Code Online (Sandbox Code Playgroud)

unit-testing xunit.net

5
推荐指数
1
解决办法
964
查看次数