我已经看到了关于'如何存根你的课程以便你可以控制SUT内发生的事情'的多个答案.
他们说一件事:
创建一个接口并使用依赖注入注入该接口,并使用随后注入SUT的相同接口创建存根.
但是,我在以前的工作场所学到了什么:
如果进行单元测试,则测试所有类/功能.
这是否意味着对于每个具有特定功能布局的类,您必须创建一个接口?
这意味着类/文件的数量几乎是两倍.
如下面的例子所示,这是"走的路"还是我在单元测试过程中遗漏了什么?
注意:我使用的是VS2012 Express.这意味着没有'Faker'框架.我正在使用'标准'VS2012单元测试框架.
作为一个非常非常简单的例子,它允许我将传递给SUT的每个接口存根.
IFoo.cs
public interface IFoo
{
string GetName();
}
Run Code Online (Sandbox Code Playgroud)
Foo.cs
public class Foo : IFoo
{
public string GetName()
{
return "logic goes here";
}
}
Run Code Online (Sandbox Code Playgroud)
IBar.cs:
public interface IBar : IFoo
{
IFoo GetFoo();
}
Run Code Online (Sandbox Code Playgroud)
Bar.cs:
public class Bar : IBar
{
public string GetName()
{
return "logic goes here";
}
public IFoo GetFoo()
{
return null; // some instance of IFoo
}
}
Run Code Online (Sandbox Code Playgroud)
IBaz.cs:
public interface …Run Code Online (Sandbox Code Playgroud) 根据类型参数约束(C#编程指南)文档说,我引用:
在应用where T:class约束时,请避免使用type参数上的==和!=运算符,因为这些运算符将仅测试引用标识,而不是值相等.即使这些运算符在用作参数的类型中重载,也是如此.以下代码说明了这一点; 即使String类重载==运算符,输出也是假的.
使用以下示例:
public static void OpTest<T>(T s, T t) where T : class
{
System.Console.WriteLine(s == t);
}
static void Main()
{
string s1 = "target";
System.Text.StringBuilder sb = new System.Text.StringBuilder("target");
string s2 = sb.ToString();
OpTest<string>(s1, s2);
}
Run Code Online (Sandbox Code Playgroud)
但是,ReSharper(我刚刚开始使用demo/trial版本来查看它是否对我有任何价值)提供了一个提示/提示来对参数进行空值检查,如下所示:
public Node(T type, Index2D index2D, int f, Node<T> parent)
{
if (type == null) throw new ArgumentNullException("type");
if (index2D == null) throw new ArgumentNullException("index2D");
if (parent == null) throw new ArgumentNullException("parent");
}
Run Code Online (Sandbox Code Playgroud)
(T受限制where T : …
我有DataTable,其中包含以下列:
ClientID date numberOfTransactions price
Run Code Online (Sandbox Code Playgroud)
ClientID的类型为string,我需要确保其内容包含表中每个值的"A-"和"N6".
我需要删除DataTable中的所有行,其中第一列(ClientID)不包含"A-" 和 "N6"(一些总计和其他不必要的数据).如何从DataTable中专门选择和删除这些行?
我知道这个:
foreach (DataRow row in table.Rows) // Loop over the rows.
{
//Here should come part "if first column contains mentioned values
}
Run Code Online (Sandbox Code Playgroud)
我也知道这一点
If (string.Contains("A-") == true && string.Contains("N6") == true)
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
我需要帮助如何为每行的第一列实现此功能.
米斯拉说禁止所有工会。我也知道,只要对偏差进行了彻底的讨论和记录,就可以允许它们。
我们有一个微控制器和一个外部eeprom来存储统计数据(事件/错误记录,参数设置等等)。
该事件日志由大约80多个事件计数器组成,其中一些计数器为8、16和32位(均为无符号)。参数存储区由大约200个参数组成,还与8、16和32位值(无符号)混合在一起。
我们正在重写所有符合MISRA的代码,并且这些值先前已定义如下:
typedef struct
{
U16BIT eventLogVar1;
U32BIT eventLogVar2;
U8BIT eventLogVar3;
U8BIT eventLogVar4;
U32BIT eventLogVar5;
} EVENT_LOG;
typedef union
{
EVENT_LOG log;
U8BIT array[sizeof(EVENT_LOG)];
} ELOG;
ELOG log;
Run Code Online (Sandbox Code Playgroud)
现在这不是真的符合MISRA。参数日志也是如此。但这是从eeprom读取和写入的最简单方法,因为我只需要通过阵列读取/写入即可从eeprom读取/写入。
我们还有其他一些规则是我们绝对不允许违反的。没有全局(外部)变量(通过头文件)。如果需要,所有局部变量只能通过get / set函数访问。
这意味着,如果我们需要完全写出所有这些参数,则每个参数都应获得自己的get / set函数以在整个应用程序中更改它们。
我考虑过的解决方案之一是:
#ifdef EITHER
enum
{
eventLogVar1 = 0; /* 00 */
pad01; /* 01 */
eventLogVar2; /* 02 */
pad03; /* 03 */
pad04; /* 04 */
pad05; /* 05 */
eventLogVar3; /* 06 */
eventLogVar4; /* 07 */
eventLogVar5; /* 08 …Run Code Online (Sandbox Code Playgroud) int x = 15 ;
printf ( "\n%d \t %d \t %d", x != 15, x = 20, x < 30 ) ;
Run Code Online (Sandbox Code Playgroud)
代码的输出是1 20 1,但我认为它应该是0 20 1,因为15 == 15 ...
我遇到了"x!= 15"部分的问题
我所得到的是basicly两个类Plugin和PluginLauncher
插件是一个抽象类,它实现了一些函数,使类成为PluginLauncher类的插件.
PluginLauncher是一个包含集合(SortedDictionary)的类,包括一些帮助函数来启动,停止,重启所有或特定的插件.
它还在初始化时加载所有插件.每个插件都可以是.exe或.dll,其类继承自Plugin.为每个插件创建一个AppDomain,并为每个插件设置通信(通过套接字通过简单的IPC消息传递)(仍然必须实现)
我希望有一个非常非常基本的GUI实现,它只包含所有已加载的插件的列表,注意插件名称,状态(可以运行,停止,停止,已经过早停止(一个枚举))和每个插件的按钮启动,停止或重新启动它.
我知道我可以通过在GUI上放置元素并计算每个X/Y位置等来添加程序功能,但我确信WPF有一些预制的'功能'.但我对WPF很新,并且不知道从哪里开始寻找.
一个简单的说明:我被限制为.net 3.5(或更低)因此没有4.0元素.
我已经包含了一个非常简单(万岁的mspaint技能)的例子.

是否有一个特定的原因,PhpStorm以斜杠为前缀构造函数的返回类型?
class MyTest
{
/**
* Constructor
*
* @return \MyTest
**/
public function __construct(){}
}
Run Code Online (Sandbox Code Playgroud)
它在PHPDoc本身中有特殊含义吗?还是一些特定的IDE功能?