小编Ant*_*ram的帖子

如何使用moq测试抽象类中的具体方法?

在过去,当我想模拟一个抽象类时,我只是在扩展抽象类的代码中创建一个模拟类,然后在我的单元测试中使用该类...

public abstract class MyConverter : IValueConverter
{
    public abstract Object Convert(...) { ... };

    public virtual Object ConvertBack(...) { ... }
}

private sealed class MockedConverter : MyConverter { ... }

[TestMethod]
public void TestMethod1()
{
    var mock = new MockedConverter();

    var expected = ...;
    var actual = mock.ConvertBack(...);

    Assert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

我想养成使用Moq的习惯.我不确定如何使用Moq来测试抽象类的默认返回值.有什么建议吗?

c# abstract-class unit-testing moq mocking

16
推荐指数
2
解决办法
1万
查看次数

实现C#语言扩展

使用Parallel Linq等系统,可以跨单个机器中的多个内核和线程分离匿名函数,查询等的执行.我希望能够使用标准语言结构(例如for循环(如Parallel.For()),ints,structs 等值类型)扩展它以跨多台机器运行,并将应用程序源修改保持在最低限度.理想情况下,这将允许我打开一个项目,向方法添加属性,并重新编译以获得对增强功能的访问.

看来我需要的东西是:

  1. 能够捕获已编译的代码块(例如lambda)并将其传递给在另一个节点上运行的工作进程以及所需的任何数据,或者

  2. 提供一个预处理器,它将捕获有问题的代码,在一个模板项目中编译它,它将替换变量引用等,引用一个类来处理网络通信,缓存和访问任何其他所需资产,并发送将DLL生成到在其他计算机上运行的任何可用工作节点.

Roslyn似乎提供了一些在这里很有用的工具.有没有办法挂钩到当前的编译管道允许这个?

编辑

好吧,我知道这是可能的,因为这些人做到了.问题是,怎么样

c# language-extension

16
推荐指数
2
解决办法
1141
查看次数

ArrayList相等JUnit测试

我想使用assertArrayEquals(ArrayList<Token>, ArrayList<Token>)with这些参数(即tolist的arrayList).但Java告诉我,我需要创建这样一个方法.有没有办法测试Junit中任何类型的两个arrayLists的相等性?

java junit

15
推荐指数
4
解决办法
5万
查看次数

在C#中使用条件运算符键入结果

我正在尝试使用条件运算符,但我会挂起它认为结果应该是的类型.

下面是一个我设法表明我遇到的问题的例子:

class Program
{
    public static void OutputDateTime(DateTime? datetime)
    {
        Console.WriteLine(datetime);
    }

    public static bool IsDateTimeHappy(DateTime datetime)
    {
        if (DateTime.Compare(datetime, DateTime.Parse("1/1")) == 0)
            return true;

        return false;
    }

    static void Main(string[] args)
    {
        DateTime myDateTime = DateTime.Now;
        OutputDateTime(IsDateTimeHappy(myDateTime) ? null : myDateTime);
        Console.ReadLine();                        ^
    }                                              |
}                                                  |
// This line has the compile issue  ---------------+
Run Code Online (Sandbox Code Playgroud)

在上面指出的行上,我得到以下编译错误:

无法确定条件表达式的类型,因为'<null>'和'System.DateTime'之间没有隐式转换

我很困惑因为参数是可以为空的类型(DateTime?).为什么需要转换呢?如果它为null,则使用它,如果是日期时间则使用它.

我的印象是:

condition ? first_expression : second_expression;
Run Code Online (Sandbox Code Playgroud)

与以下相同:

if (condition)
   first_expression;
else
   second_expression;
Run Code Online (Sandbox Code Playgroud)

显然情况并非如此.这背后的原因是什么?

(注意:我知道,如果我将"myDateTime"设为可以为空的DateTime,那么它会起作用.但为什么需要呢?

正如我之前所说,这是一个人为的例子.在我的实例中,"myDateTime"是一个数据映射值,不能为空.)

c# nullable ternary-operator type-conversion conditional-operator

11
推荐指数
1
解决办法
1126
查看次数

C#将动态字符串转换为现有的Class

在Windows应用程序中,使用C#,我有一个报告模块,它将依赖于类来填充报告.但是会有很多报告,我不想为每个报告编写代码.

流程将如下:在报告编辑器中,报告将被分配一个类(即"应用程序")作为字符串.当用户选择要运行的报告时,代码将从SQL查询中获取数据.代码将获取数据并找出将数据放入哪个类.然后,报告将获取该类,并使用该类中的数据填充报告.

这是我的困境,我如何使代码动态化,以便代码将指定的类转换为适当的类对象?

记住的例子:

gVar = Report;
(gVar.ReportClass)oClass = new gVar.ReportClass;
Run Code Online (Sandbox Code Playgroud)

c# string class dynamic

11
推荐指数
1
解决办法
4万
查看次数

为什么ArrayList <ArrayList <?>> list = new ArrayList <ArrayList <String >>()不能编译?

为什么这段代码会编译

final ArrayList<?> dp1 = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

final ArrayList<ArrayList<?>> dp2 = new ArrayList<ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)

java generics

11
推荐指数
2
解决办法
387
查看次数

我可以在C#中使用某种"类"吗?

我想知道是否可以做某事.我有一个函数,它读取一个xml文件,并根据文件中的内容向表单添加控件.像这样的xml节点将创建它:

<Button Top="300" Left="100">Automatic</Button>
Run Code Online (Sandbox Code Playgroud)

我有一个函数,如果我在编辑模式下添加任何控件,则将控件保存回xml文件.它工作正常,但我想知道是否有更简单的方法.目前,我有这样的代码来创建每个控件的实例:

            switch (xmlchild.Name)
            {
                // Create a new control whose type is specified.
                case "Button":
                    c = new Button();
                    break;
                case "Label":
                    c = new Label();
                    break;
                default:
                    c = null;
                    break;
            }
Run Code Online (Sandbox Code Playgroud)

但是,当我想使用更多类型的控件时,我需要不断添加开关案例.我可以做一些只需要文本并添加该类型控件的东西吗?我将不胜感激任何反馈!

谢谢!

c# casting

10
推荐指数
1
解决办法
208
查看次数

为字符串添加null时为什么没有异常?

为什么不抛出异常不明白,obj为null

object obj = null;
Console.WriteLine("Hello World " + obj);
Run Code Online (Sandbox Code Playgroud)

c# string-concatenation

10
推荐指数
1
解决办法
447
查看次数

确定字符串长度的最有效方法!= 0?

我正在努力加快以下方面的步伐:

string s; //--> s is never null

if (s.Length != 0)
{
   <do something>
}
Run Code Online (Sandbox Code Playgroud)

问题是,看起来.Length实际上是对字符串中的字符进行计数,这比我需要的工作更多.有人知道如何加快速度吗?

或者,有没有办法确定s [0]是否存在,w/out检查字符串的其余部分?

c# string content-length

10
推荐指数
3
解决办法
3万
查看次数

MSIL中的"代码大小"是什么意思

当你看到IL中的一行时:

// Code size       25 (0x19)
Run Code Online (Sandbox Code Playgroud)

尼特实际意味着什么?它是在谈论(字节)内存使用情况吗?我能够收集的只是它比IL线的数量多一个.以下是完整的IL.

.method private hidebysig static void  Execute(string y) cil managed
{
  // Code size       25 (0x19)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "string"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ldarg.0
  IL_000d:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0012:  call       void [mscorlib]System.Console::WriteLine(object)
  IL_0017:  nop
  IL_0018:  ret
} //
Run Code Online (Sandbox Code Playgroud)

当我查看ECMA_335文档时,它将代码大小定义为:代码(文本)部分的大小,或者如果有多个部分则所有代码部分的总和.(啊?)

.net cil

10
推荐指数
1
解决办法
629
查看次数