我需要编写一个函数,它接收一个属性作为参数并执行它的getter.
如果我需要传递一个函数/委托,我会使用:
delegate RET FunctionDelegate<T, RET>(T t);
void func<T, RET>(FunctionDelegate function, T param, ...)
{
...
return function.Invoke(param);
}
Run Code Online (Sandbox Code Playgroud)
是否有类似的方法来定义属性,以便我可以在函数代码中调用它的getter和/或setter?
我已经使用NUnit几年了.我已经尝试了一段时间的MBUnit以及Zenebug和XUnit,但我一直在回NUnit.
您最喜欢/最常用的单元测试框架是什么?你能解释一下你使用它的原因吗?
在过去,我使用C#编写了大部分单元测试,即使实际的软件开发是在另一种.NET语言(VB.NET,C++ .NET等)中,但我可以使用VB来获得相同的结果.我想我使用C#的唯一原因是因为互联网上的大多数例子都是用C#编写的.
我使用单元测试作为.NET软件开发的一部分,您更喜欢使用哪种语言,以及您选择使用它的原因是什么?
我知道它在很大程度上取决于被测试的语言,但我感兴趣的是在单元测试时是否有特定语言的偏好.
在方法调用中,我需要在堆栈中"跳转"三层并检索传递给该方法的参数的类型和值.获取参数类型很简单,但我找不到将值传递给堆栈上的某个方法的方法.
var st = new StackTrace();
var frames = st.GetFrames();
var methodParameters = frame[2].GetMethod().GetParameters;
// get each parameter value
Run Code Online (Sandbox Code Playgroud)
注意:使用StackTrace不是强制性的.
有没有办法在运行时找到传递给方法的参数值?
我正在尝试定义一种方法来模拟访问数据库而不访问的情况......这可能听起来很疯狂,但事实并非如此.
这是一个关于我想测试的方法的示例:
public IDevice GetDeviceFromRepository(string name)
{
IDevice device = null;
IDbConnection connection = new SqlConnection(ConnectionString);
connection.Open();
try
{
IDbCommand command = connection.CreateCommand();
command.CommandText = string.Format("SELECT DEVICE_ID,DEVICE_NAME FROM DEVICE WHERE DEVICE_NAME='{0}'", name);
IDataReader dataReader = command.ExecuteReader();
if(dataReader.NextResult())
{
device = new Device(dataReader.GetInt32(0),dataReader.GetString(1));
}
}
finally
{
connection.Close();
}
return device;
}
Run Code Online (Sandbox Code Playgroud)
我假装模仿IDataReader,所以我可以控制正在阅读的内容.类似的东西(使用Moq框架):
[TestMethod()]
public void GetDeviceFromRepositoryTest()
{
Mock<IDataReader> dataReaderMock = new Mock<IDataReader>();
dataReaderMock.Setup(x => x.NextResult()).Returns(true);
dataReaderMock.Setup(x => x.GetInt32(0)).Returns(000);
dataReaderMock.Setup(x => x.GetString(1)).Returns("myName");
Mock<IDbCommand> commandMock = new Mock<IDbCommand>();
commandMock.Setup(x => x.ExecuteReader()).Returns(dataReaderMock.Object);
Mock<RemoveDeviceManager> …Run Code Online (Sandbox Code Playgroud) 我希望能够检测到关键配置文件何时被更改.
我已经使用Configuration Section Designer来创建一个简单的配置文件,但现在我找不到一种简单的方法来加密结果或为它添加一个值来检查它是否已被更改.
我希望能够阻止未经授权的用户更改配置文件,或者至少知道文件是否已更改.
我需要将单个固定大小的数组数组映射到多个属性.例如给出这个类:
public class Source
{
public int[] ItemArray{get;set} // always 4 items
}
Run Code Online (Sandbox Code Playgroud)
我想将数组映射到此类
public class Dest
{
public int Item1{get;set;}
public int Item1{get;set;}
public int Item1{get;set;}
public int Item1{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来使用AutoMapper(没有实际映射每个单独的字段)?
我工作的其中一个项目需要读取注册表项以确定某些值.通常在安装期间会写入值.
因为我想在本地运行项目(没有安装),我想在构建完成后编写该值.
有一种简单的方法可以做到吗?
我在两个不同的.NET程序集中有两个类A和B:AssemblyA和AssemblyB.
我希望B类继承A类,但我希望它使用B类只需要引用AssemblyB(而不是AssemblyA和AssemblyB).
由于项目限制,我需要将两个程序集分开,因此我无法使用合并工具合并两个程序集.
请注意,类的实际继承不是必须的 - 我希望能够在AssemblyB中将A运行的逻辑作为B类的一部分,尽可能少地重写功能.
有没有办法实现这个目标?
我正在编写一个Visual Studio扩展/加载项,我想找到当前解决方案中从项目创建的所有程序集的名称.
我没有任何技术限制 - 我可以使用DTE,MEF或任何其他完成工作的人.
我有多个类,它们对不同的命名方法有类似的实现:
class MyClassX
{
public int MyClassXIntMethod(){}
public string MyClassXStringMethod(){}
}
class MyClassY
{
public int MyClassYIntMethod(){}
public string MyClassYStringMethod(){}
}
Run Code Online (Sandbox Code Playgroud)
类中的方法具有类似的实现,但由于方法的名称不同(由于第三方约束),我不能使用继承.
我正在寻找一种优雅的解决方案,它比一遍又一遍地实现相同的功能更好.
我们正在从MOQ迁移到Typemock.在MOQ中,我们具有从接口获取代理类的功能,我们希望从typemock实现相同的功能.实际上我们的要求是这样的,我们在我们的应用程序中使用Ninject IoC/DI模式,并希望在单元测试中享受它的好处.
我们希望使用Ninject内核向FakeClass或更合适的ProxyClass注册接口.语法有点像这样
kernel.Bind(interface).to(class)
Run Code Online (Sandbox Code Playgroud)
我们想要
kernel.Bind(interface).to(fakeclass)
Run Code Online (Sandbox Code Playgroud)
在MOQ中我们这样做
var mock=new Mock(interface)
Run Code Online (Sandbox Code Playgroud)
和mock.Object()方法给了我们假的类.
谢谢
c# ×5
unit-testing ×4
.net ×3
typemock ×2
assemblies ×1
automapper ×1
build-events ×1
envdte ×1
generics ×1
inheritance ×1
moq ×1
nunit ×1
oop ×1
reflection ×1
stack-trace ×1
vsx ×1