我最近不得不为一个安装项目(使用最流行的产品创建安装:InstallShield)而努力使其适用于产品升级(从一个版本迁移到另一个版本).最后我发现我需要使用一个长包代码但是正在使用其他一些代码.浪费了我8个小时(测试和调试安装程序很痛苦).
现在,如果我考虑一下,一旦你完成了编码的所有困难部分,你想要的只是正确的应用程序,库被复制到目标计算机,用户只需运行它.期.这个看似简单的任务通常是一个棘手的任务,"关闭以完成约会"使得更加艰难.
难道你不觉得在窗户上部署一个产品本来就很困难本来应该更简单吗?(或安装人员真的应该得到那么多的关注,我只是为此疯狂?)
您是否曾使用过更简单的部署方案,例如"将文件夹复制到您喜欢的位置并运行exe.当您要删除它时,只需删除该文件夹!"?它有效并使事情变得简单吗?
NUnit的GUI runner中有几个选项卡: alt text http://i43.tinypic.com/2lxglj5.png
我知道使用Console.WriteLine(...)会在"Console.Out"选项卡中显示消息.我的问题是其他标签是什么以及如何将消息记录到它们?
[编辑]
我道歉,因为我意识到我原来的问题不够明确.我打算做的是在执行所有单元测试用例后创建一个扩展的结果报告.所以我正在探索在运行测试时可以记录的各种消息的方式.我期待着创建一个结果报告,如:
==== TEST1 starts ==== Start Time: 2009-03-26 11:15:13 AM Checking operation 1....OK Checking value of variable "X": 52.56....OK End Time: 2009-03-26 11:15:19 AM Time taken to execute test: 0.00:00:06.000 ==== TEST2 starts ==== . .
有什么建议我怎么能实现这个目标?
我正在开发一个用于与外部设备进行通信(通过RS232串行通信)的库.我在考虑错误处理策略,异常似乎是正确的,行业标准的报告错误方式.
所以我读了一些关于例外的指南.一个很明确指出,我不担心性能问题:
不要使用错误代码,因为担心异常可能会对性能产生负面影响.
其他告诉我在正常情况下不要抛出异常:
不要将异常用于正常或预期的错误,也不要用于正常的控制流程.
我无法在正常/预期和其他情况之间划清界限.例如,在我的库中,操作可能会失败,因为:
我可以认为上述所有问题都是预期的问题,因为它们可能经常在实践中发生(事实上许多营销蠢货叫我解决我的软件中的^问题^只是为了发现他们没有将电缆连接到他们的笔记本电脑).因此可能不应该抛出异常,因为否则应用程序员必须在很多地方捕获那些(很多我认为很多catch块也不好).
另一方面,我也倾向于认为这些都是我在某种程度上需要向应用程序员报告的错误,异常似乎是这样做的方法.如果我不使用异常,我将需要使用一些错误代码或错误枚举报告这些问题.(丑陋,我知道).
你认为我应该采取哪种方法?
我曾经认为使用SocketOptionName.ReuseAddress,我可以重用一个处于TIME_WAIT状态的端口.但我试着试验它似乎没有效果.
如果我检查套接字使用netstat,并且它显示套接字处于TIME_WAIT状态并且我立即再次运行客户端,我得到异常:
通常只允许使用每个套接字地址(协议/网络地址/端口)172.16.16.16:12345
我无法做出任何改变.请问你能详细说明SocketOptionName.ReuseAddress的用途吗?
我想在oracle数据库(10 g)中保存unicode数据(希腊语).我创建了一个简单的表:
alt text http://i25.tinypic.com/dvpqnk.png
我知道NVARCHAR2总是使用UTF-16编码,所以它必须适用于所有(人类)语言.
然后我试图在数据库中插入一个字符串.我在代码中硬编码了字符串("你好吗?").然后我尝试从数据库中恢复并显示它.
class Program
{
static string connectionString = "<my connection string>";
static void Main (string[] args) {
string textBefore = "?? ??????;";
DeleteAll ();
SaveToDatabase (textBefore);
string textAfter = GetFromDatabase ();
string beforeData = String.Format ("Before: {0}, ({1})", textBefore, ToHex (textBefore));
string afterData = String.Format ("After: {0}, ({1})", textAfter, ToHex (textAfter));
Console.WriteLine (beforeData);
Console.WriteLine (afterData);
MessageBox.Show (beforeData);
MessageBox.Show (afterData);
Console.ReadLine ();
}
static void DeleteAll () {
using (var oraConnection = new OracleConnection (connectionString)) …Run Code Online (Sandbox Code Playgroud) 我正在研究一个服务器应用程序(C#,.NET 4.0),它需要每秒处理数千个UDP数据包.所以我决定SocketAsyncEventArg实现服务器.
我面临的问题是我的实现只收到一个数据包然后我得到"ConnectionReset"错误(我从未想过我会得到这个错误,因为UDP是无连接的).这是我的测试实现:
using System;
using System.Net;
using System.Net.Sockets;
static class Program
{
static void Main(string[] args)
{
UdpEchoServer.Start();
while (true)
{
Console.ReadLine();
SendPacket();
}
}
static void SendPacket()
{
Console.WriteLine("SendPacket");
var c = new UdpClient();
c.Send(new byte[5], 5, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 445));
c.Close();
}
}
static class UdpEchoServer
{
static Socket mSocket;
static byte[] mBuffer;
static SocketAsyncEventArgs mRxArgs, mTxArgs;
static IPEndPoint mAnyEndPoint, mLocalEndPoint;
public static void Start()
{
mAnyEndPoint = new IPEndPoint(IPAddress.Any, 0);
mLocalEndPoint = new IPEndPoint(IPAddress.Any, 445); …Run Code Online (Sandbox Code Playgroud) 这是关于.NET库(DLL).
测量单元测试用例所涵盖的代码的选项有哪些?实际上值得努力(测量代码覆盖率)吗?我想要覆盖70%的代码可能太容易了,几乎不可能超过90%.
[编辑]另一个有趣的问题(由"E Rolnicki"提出)是:什么被认为是合理的覆盖率%?
我有一个(新)项目,它有一个Web服务参考.它具有以下结构:
<Folder: project folder>
<File: source file 1>
<File: source file 2>
<File: source file .>
Folder: Web References
Folder: MyService
File: Reference.map
File: Reference.cs
File: MyService.xsd
File: MyService0.xsd
File: MyService.wsdl
File: MyService0.wsdl
File: MyService0.disco
Run Code Online (Sandbox Code Playgroud)
我即将签入源代码到版本控制系统.我必须办理哪些文件?
我认为这将是一个常见的问题所以我搜索了一段时间却找不到它.
我即将开始一个新项目(C#,.net 3.5),我在想我应该在哪里编写单元测试代码.我可以创建一个单元测试项目并在那里编写所有代码,或者我可以用"被测试类"本身编写单元测试代码.
你有什么建议?为什么?在选择方法之前需要考虑的事项(警告?)?
编辑:关于用"被测代码"编写单元测试代码:我猜测从生产组件中删除测试代码并不困难.这是条件编译的用途.对?
只是抛出这一点,因为答案拒绝第二种选择只是因为生产组件会变得肥胖.
在我当前的C#/ NET 3.5应用程序中,我有一个任务队列(线程安全),我有5个工作线程,必须不断查找队列中的任务.如果任务可用,任何一个工作人员都会使任务出列并采取必要的操作.
我的工作线程类如下:
public class WorkerThread
{
//ConcurrentQueue is my implementation of thread safe queue
//Essentially just a wrapper around Queue<T> with synchronization locks
readonly ConcurrentQueue<CheckPrimeTask> mQ;
readonly Thread mWorker;
bool mStop;
public WorkerThread (ConcurrentQueue<CheckPrimeTask> aQ) {
mQ = aQ;
mWorker = new Thread (Work) {IsBackground = true};
mStop = false;
}
private void Work () {
while (!mStop) {
if (mQ.Count == 0) {
Thread.Sleep (0);
continue;
}
var task = mQ.Dequeue ();
//Someone else might have been …Run Code Online (Sandbox Code Playgroud) .net ×7
c# ×5
unit-testing ×3
sockets ×2
asynchronous ×1
installer ×1
nunit ×1
oracle ×1
oracle10g ×1
tcp ×1
unicode ×1
wcf ×1
web-services ×1
windows ×1