小编sip*_*wiz的帖子

保持您的源关闭和您的单元测试更紧密

当我第一次开始使用单元测试时遇到了两个问题.首先是能够测试私人方法和领域,然后在快速开发发生时保持单元测试的最新状态.因此,我采用了以下方法进行单元测试.

#if UNITTEST
using NUnit.Framework;
#endif

public class MyBlackMagic
{
   private int DoMagic()
   {
      return 1;
   }

   #if UNITTEST

   [TestFixture]
   public class MyBlackMagicUnitTest
   {
        [TestFixtureSetUp]
        public void Init()
        {
             log4net.Config.BasicConfigurator.Configure();
        }

        [Test]
        public void DoMagicTest()
        {
             Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name);
             Assert.IsTrue(DoMagic() == 1, "You are not a real magician!");
         }
     }

     #endif
 }
Run Code Online (Sandbox Code Playgroud)

我发现这种方法克服了我的两个问题,它是一个预编译器开关的轻弹,以确保所有单元测试编译.

我现在的问题是,我正在转向一个新的项目,其中的谈话是使用单独的程序集来进行单元测试.在我深入研究并开始阐述内部类方法的优点之前,如上所示,我想知道是否有人认为它有任何缺点?

编辑:

只是为了解一些提到的弱点:

  • 由于UNITTEST预编译器标志被关闭,单元测试代码永远不会影响生产代码,
  • 单元测试代码不会使主代码的可读性降低,因为它放在每个类的底部并包装在Visual Studio区域指令中,
  • 我发现内部单元测试类意味着主类实际上更简单,因为没有额外的方法或属性只是为了测试而暴露.总会有一些情况,你想早晚测试一个类的内部状态作为单元测试的一部分......

c# nunit unit-testing

4
推荐指数
3
解决办法
815
查看次数

C比较char和int

在下面的代码块中,7语句的if语句中发生的impicit转换是什么?虽然它最终会成为(0x98 <= 0x07),但是当条件评估为真并且调用DoMyStuff时,情况并非如此.

char minstogo = 0x98;
if(minstogo <= 7) {
   DoMyStuff();
}
Run Code Online (Sandbox Code Playgroud)

c

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

WCF列出实现特定合同的所有客户端端点

有没有办法在应用程序配置文件中列出所有WCF客户端端点?

我需要建立到不同服务器的多个客户端连接,并希望找到一种方法来维护应用程序配置文件中的所有客户端连接信息.

wcf

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

使用sed组合多个csv文件

我有3个csv文件,我想结合起来.每个文件都有3个逗号分隔的列.

File 1 has columns a,b,c
File 2 has columns d,e,f
File 3 has columns g,h,i
Run Code Online (Sandbox Code Playgroud)

我想将3个文件合并为一个文件:

a,b,c,e,f,h
Run Code Online (Sandbox Code Playgroud)

我可以使用sed来做到这一点吗?

我可以轻松地编写控制台应用程序或脚本,但我试图获得一些sed技能,并认为这应该是一个合适的任务?

csv bash sed

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

是否可以在单个语句中声明和使用匿名函数?

有没有办法将以下两行合并为一个语句?

Func<XmlNode> myFunc = () => { return myNode; };
XmlNode myOtherNode = myFunc();
Run Code Online (Sandbox Code Playgroud)

我一直在尝试类似下面的东西,但无法让它工作,无法从文档中确定它是否应该工作?

XmlNode myOtherNode = ((Func<XmlNode>) () => { return myNode; })();
Run Code Online (Sandbox Code Playgroud)

c# lambda

3
推荐指数
1
解决办法
157
查看次数

可以使用lambda函数覆盖方法

有没有办法用lambda函数覆盖一个类方法?

例如,具有类的定义

class MyClass {  
    public virtual void MyMethod(int x) {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何要做:

MyClass myObj = new MyClass();
myObj.MyMethod = (x) => { Console.WriteLine(x); };
Run Code Online (Sandbox Code Playgroud)

c# lambda

3
推荐指数
2
解决办法
2022
查看次数

控制线程退出haskell应用程序

我是Haskell的新手,并且在处理一些样本时,我遇到了一个无法阻止程序的问题.我正在使用Windows 7并使用ght的runhaskell.Ctrl-c不起作用所以我不得不求助于任务管理器,这有点痛苦.

而不是这样做我怎么能创建一个单独的控制线程,等待我输入q然后退出我的Haskell应用程序.

我遇到问题的应用程序的格式是:

main = do
 h <- connectTo server (PortNumber (fromInteger port))
 hSetBuffering h NoBuffering
 ... do some stuff with the socket handle ...
 listen h

listen :: Handle -> IO ()
listen h = forever $ do
  t <- hGetLine h
  let s = init t
  putStrLn s
where
  forever a = do a; forever a
Run Code Online (Sandbox Code Playgroud)

在伪代码中,我想要的是:

main = do
  waitForQuit
  ... original program ...

waitForQuit :: IO()
   option <- getChar
   if option == 'q' then
     ... …
Run Code Online (Sandbox Code Playgroud)

io concurrency haskell asynchronous

3
推荐指数
1
解决办法
2043
查看次数

可以锁定列表失败

我有一个继承自MemoryStream的类,以提供一些缓冲.该类的工作方式完全符合预期,但在读取过程中我偶尔会收到InvalidOperationException,并显示错误消息

收集被修改; 枚举操作可能无法执行.

我的代码在下面,枚举集合的唯一行似乎是:

m_buffer = m_buffer.Skip(count).ToList();
Run Code Online (Sandbox Code Playgroud)

但是我有这个以及所有其他可以在锁内修改m_buffer对象的操作,所以我对于Write操作如何干扰Read导致该异常感到困惑?

public class MyMemoryStream : MemoryStream
{
    private ManualResetEvent m_dataReady = new ManualResetEvent(false);
    private List<byte> m_buffer = new List<byte>();

    public override void Write(byte[] buffer, int offset, int count)
    {
        lock (m_buffer)
        {
            m_buffer.AddRange(buffer.ToList().Skip(offset).Take(count));
        }
        m_dataReady.Set();
    }

    public override int Read(byte[] buffer, int offset, int count)
    {
        if (m_buffer.Count == 0)
        {
            // Block until the stream has some more data.
            m_dataReady.Reset();
            m_dataReady.WaitOne();
        }

        lock (m_buffer)
        {
            if (m_buffer.Count >= count)
            {
                // More …
Run Code Online (Sandbox Code Playgroud)

c# locking

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

在CSV文件中使用shell实用程序等效于SQL group by

我有一个csv文件,其中最左边的列包含一个ID字段.我是否有一种聪明的方法可以使用任何实用程序(如sed)来查找多次使用的ID?

shell sed

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

如何使用PySide获取maya主窗口指针?

我在maya中使用了PyQt4,通常我发现切换到PySide很容易,但是我无法获得指向主窗口的指针.也许有人可以理解出了什么问题.

这是我在PyQt4中所做的:

import sip, PyQt4.QtCore
import maya.OpenMayaUI as mui
ptr = mui.MQtUtil.mainWindow()
parent = sip.wrapinstance(long(ptr), PyQt4.QtCore.QObject)
Run Code Online (Sandbox Code Playgroud)

这很好用.当我在PySide中尝试相同时:

import sip, PySide.QtCore
import maya.OpenMayaUI as mui
ptr = mui.MQtUtil.mainWindow()
parent = sip.wrapinstance(long(ptr), PySide.QtCore.QObject)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

# Error: wrapinstance() argument 2 must be sip.wrappertype, not Shiboken.ObjectType
# Traceback (most recent call last):
#   File "<maya console>", line 4, in <module>
# TypeError: wrapinstance() argument 2 must be sip.wrappertype, not Shiboken.ObjectType # 
Run Code Online (Sandbox Code Playgroud)

谁知道出了什么问题?

python pyqt maya pyside

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

标签 统计

c# ×4

lambda ×2

sed ×2

asynchronous ×1

bash ×1

c ×1

concurrency ×1

csv ×1

haskell ×1

io ×1

locking ×1

maya ×1

nunit ×1

pyqt ×1

pyside ×1

python ×1

shell ×1

unit-testing ×1

wcf ×1