我正在尝试在Visual Studio 2010中的当前项目上开始使用单元测试.但是,我的类结构包含许多接口和抽象类继承关系.
如果两个类是从同一个抽象类或接口派生的,那么我希望能够在它们之间共享测试代码.我不确定该怎么做.我想我为每个要测试的接口创建了一个测试类,但我不确定将具体类提供给适用的单元测试的正确方法.
更新
好的,这是一个例子.假设我有一个接口IEmployee,它由一个抽象类Employee实现,然后由两个具体的类Worker和Employee继承.(代码如下)
现在说我想创建适用于所有IEmployees或Employees的测试.或者为特定类型的员工创建特定测试.例如,我可能想断言将IEmployee.Number设置为小于零的数字,因为任何IEmployee实现都会引发异常.我更喜欢从任何IEmployee的角度编写测试,然后能够在IEmployee的任何实现上使用测试.
这是另一个例子.我可能还想断言,将任何员工的休假时间设置为小于零的值和错误.然而,我可能还希望有不同的测试适用于特定的Employee特定版本.假设我想测试如果工作人员提供超过14天的假期,那么工作人员会抛出异常,但最多可以提供36名经理.
public interface IEmployee
{
string Name {get; set;}
int Number {get; set;}
}
public abstract class Employee:IEmploee
{
string Name {get; set;}
int Number {get;set;}
public abstract int VacationTime(get; set;)
}
public abstract class Worker:IEmployee
{
private int v;
private int vTime;
public abstract int VacationTime
{
get
{
return VTime;
}
set
{
if(value>36) throw new ArgumentException("Exceeded allowed vaction");
if(value<0)throw new ArgumentException("Vacation time must be >0");
vTime= value;
}
}
public …Run Code Online (Sandbox Code Playgroud) 我使用Visual Studio 2010创建了我的第一个安装项目.我注意到,当我构建安装项目时,它会生成一个MSI安装程序文件和一个setup.exe可执行文件.但是,我似乎能够右键单击MSI文件并选择安装来安装我的应用程序而不是运行setup.exe.
生成的setup.exe文件是否除了启动MSI文件之外还执行其他操作?分发我的应用程序时,我可以只提供MSI文件而不是MSI文件和setup.exe文件吗?
好的,我让DataContractSerializer使用我的对象图.有关更多信息,请参阅我之前的问题
但是,我的一个字段_UserPropertyDefinitions的定义如下所示.它定义了此用户可以添加到数据结构中的对象的自定义属性列表.字符串是标识属性的唯一键,Type是属性的类型,它始终是一个主要类型,如Bool,Int,String等.
每个对象都有一个对应的Dictionary(String key,Object value)集合,用于存储为任何"用户属性"设置的值.
[DataMember]
private Dictionary<string, Type> _UserPropertyDefinitions;
Run Code Online (Sandbox Code Playgroud)
当此属性为空集合时,我的对象图序列化很好,但是当我向此集合添加自定义属性时,在尝试使用DataContractSerializer进行序列化时会出现以下异常.
输入数据合约名称为'RuntimeType:http://schemas.datacontract.org/2004/07/System '的'System.RuntimeType' 不是预期的.将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.
如果我删除此字段的DataMember属性,我可以序列化/反序列化而不会获得异常,但当然我放弃了我在此字段中创建的设置.
如果我有一个DataTable并且想要创建一个新行,我首先调用DataTable.NewRow()它返回一个DataRow.然后该行具有表的模式,我可以设置行中每个字段的值.在这一点上,表格"知道"关于Row,还是仅在我打电话后才发生DataTable.Rows.Add(DataRow row)?
如果我调用DataTable.Rows.Add()更多,那么在数据表中创建的重复行是否有重复值?
我问的原因是我正在尝试编写一个递归函数,它将迭代树结构并用值填充DataTable.因此,我有这样的情况:为每个子项创建的行将具有具有所有相同值的列,因为它们来自父项.
所以我的想法是将带有父母信息的DataRow传递给每个孩子.孩子将添加其信息,然后将行添加到表中.但是我想弄清楚我是否需要DataTable.NewRow()为每个孩子调用,或者如果我多次添加同一行,将自动创建新行.
这是我第一次使用XSLT.我正在尝试创建一个文件,将从我使用的程序导出的XML数据文件转换为HTML报告.
元素的值之一是图像文件的路径,但生成的路径是绝对路径,例如
C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg
Run Code Online (Sandbox Code Playgroud)
但我想要一个只有文件名的相对路径.
有没有办法通过XLST文件解析文件名?
这是一件非常简单的事情,没有人能够在我读过的任何教程中说出来.
我一直在创建一些独立的.NET应用程序以及一些基于DLL的其他程序插件.我注意到Visual Studio中的项目,至少使用Windows应用程序和类库,编译成单个文件(EXE或DLL).
总是这样吗?在组织更大的应用程序方面,我是否应该始终将Visual Studio中的项目视为与最终程序中的单个文件相对应?
是否有可能从大文件的中间有效地插入或删除字节,如果是这样的话?或者我是否在插入或删除数据之后重写整个文件?
[A lot of Bytes][Unwanted Bytes][A lot of Bytes] - > [A lot of Bytes][A lot of Bytes]
or
[A lot of Bytes][A lot of Bytes] - > [A lot of Bytes][New Inserted Bytes][A lot of Bytes]
Run Code Online (Sandbox Code Playgroud) 我刚刚使用Visual Studio 2010进行单元测试.我想知道是否有一个工作流允许我创建一系列适用于接口的测试,然后将这些接口测试应用于任何和所有实现的类界面.
例如,说我有以下界面.
public interface IAnimal
{
public string Name {get;}
public string Speak();
}
Run Code Online (Sandbox Code Playgroud)
我显然可以有许多实现此接口的类.
public class Dog:IAnimal
{
public string Name {get{return "Dog";}}
public string Speak{return "BARK BARK";}
public bool LickBalls();
}
public class Cat:IAnimal
{
public string Name {get{return "Cat";}}
public string Speak{return "MEOW MEOW";}
public bool Scratch();
}
Run Code Online (Sandbox Code Playgroud)
所以我想定义一系列适用于所有人的测试 IAnimals
public TestAnimalName(IAnimal animal)
{
Assert.IsFalse(string.IsNullorEmpty(animal.Name));
}
public TestAnimalSpeak(IAnimal animal)
{
string sound = animal.Speak();
Assert.IsFalse(string.IsNullOrEmpty(sound));
}
Run Code Online (Sandbox Code Playgroud)
然后我想定义一个TestAnimal()可用于测试任何方法的主方法IAnimal.
TestAnimal(IAnimal animal)
{
TestAnimalName(animal); …Run Code Online (Sandbox Code Playgroud) 我在项目中有一个WPF窗口,其中包含一个XAML文件和相关的C#代码隐藏文件.如果我将App.xaml中的"StartupUri = MainWindow.xaml"设置为此窗口,则在我启动应用程序时,窗口会按预期打开.
但是,我希望我的应用程序获取命令行参数,然后决定是否应该打开GUI.所以我在App.xaml文件中设置了"Startup = Application_Startup",其定义如下所示.
private void Application_Startup(object sender, StartupEventArgs e)
{
if (e.Args.Length > 1)
{
//do automated tasks
}
else
{
//open ui
MainWindow window = new MainWindow();
this.MainWindow = window;
window.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我运行它时,显示的窗口完全是空白的.

我正在尝试将Amazon Cloud Watch设置为我正在处理的一些C#应用程序的远程日志记录目标.我不清楚的一件事是日志组和日志流之间的区别以及它们应该如何使用?
我有许多小应用程序,许多不同的用户将在许多计算机上运行.所以我希望能够轻松识别源应用程序,并为每条日志消息加工机器.
我的理解是日志流是" 共享相同源的日志事件序列 ",因此我似乎想为每台机器或每台机器的每个用户创建一个新的日志流.这听起来不错吗?