我有一个现有的VS 2005 Std .NET Compact Framework应用程序,我想做一些重大的重构.目前没有单元测试,但我想在搞乱代码之前添加它.我没有单元测试的实践经验,尽管我知道这个理论(只是从来没有实际实现它;我知道:对我感到羞耻:-))这里有一些我正在思考的问题:
a)作为初学者,我应该使用NUnit还是NUnitLite(声称更容易使用)?
b)我是否应该在移动设备或桌面上运行测试(当然,特定于设备的代码除外)?目前桌面看起来更具吸引力,特别是在自动构建中包含测试......
c)我想测试的课程通常如何包含在测试项目中?我的应用程序是一个.EXE文件,即我不能像测试项目中的.DLL程序集一样引用它(或者我可以吗?从未尝试过这个......).我检查了各种NUnit教程,但是没有发现它,或者有一个教程建议将我要测试的类复制并粘贴到测试项目中(yuk!).我应该链接到我的测试项目中的原始源代码文件吗?那些私有方法或其他类的依赖呢?
d)我是否应该开始修改我的原始代码以允许更好的可测试性,例如将私有方法公开,解耦等?这有点像重构之前能够测试,这对我来说听起来不太好......或者最好不要在开始时触摸原始代码,即使这意味着更少的代码覆盖等等?
e)我应该调查大多数人使用的任何其他工具或插件吗?
提前感谢任何答案(如果他们只是上述一个或一些项目,我也很感激.)
我有一个使用DataReader作为其数据源的DataGrid.我想隐藏数据网格的第一列.我正在使用.net紧凑框架3.5.我可以找到Windows窗体的示例,但api已经改变,它们不起作用.
当我使用取消按钮关闭程序时,我得到一个应用程序错误,它所做的就是关闭表单.
错误说:"应用程序appName.exe遇到严重错误,必须关闭"
我该如何开始修复它?这不是一个抛出的例外; 没有其他信息.它可能是什么,我该如何解决?
Rijndael算法的所有样本都是从Rijndael类本身定义的密钥,我们不能提供自己的密钥.对此的任何暗示都会对我有所帮助.
我们创建的示例应用程序是针对Windows Mobile的,它不支持PasswordDeriveBytes
在此先感谢Geetha
关于这个主题的更新:根据下面提供的代码示例,我们已经尝试了它,它似乎正在工作,但这有一个小小的打嗝.当我们解密数据时,在示例的值的右侧有一个8位填充,我们正在加密用于事务的唯一键,它看起来像这样:
加密前:MI03112009044625000000000000008024754008
解密后:MI03112009044625000000000000008024754008揞⑁㋬㓠⥳空⠜资
任何人都可以帮助这个正确的填充发生在原始值.
谢谢杰塔
使用Compact Framework时从URL获取图像的最佳方法是什么以及如何?
我用Google搜索,但找不到任何合适的答案.
我找到的东西就是这个(用它做了一个函数):
public Bitmap getImageFromUrl()
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(this.SImageUrl);
request.Timeout = 5000; // 5 seconds in milliseconds
request.ReadWriteTimeout = 20000; // allow up to 20 seconds to elapse
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream ms = response.GetResponseStream();
Bitmap imageFromUrl;
using (MemoryStream ms2 = new MemoryStream())
{
int bytes = 0;
byte[] temp = new byte[4096];
while ((bytes = ms.Read(temp, 0, temp.Length)) != 0)
ms2.Write(temp, 0, bytes);
imageFromUrl = new Bitmap(ms2);
}
return imageFromUrl;
}
Run Code Online (Sandbox Code Playgroud)
但它不会在pictureBox中显示任何图像.有任何想法吗?
谢谢我提前
我已经获得了用.Net CF 3.5编写的Windows Mobile应用程序来修复,其中一个问题与存储有关.
已经出现了几次"没有足够的存储空间可用于完成此操作"的消息 - 它已记录在SQL CE数据库中,并且始终在数据访问期间发生(但不是相同的数据访问位).
我有点困惑的是它是指程序存储器(例如RAM)还是存储存储器(例如永久存储器).它似乎是存储内存,但设备似乎有很多免费.虽然存在一些OutOfMemoryExceptions,但这些看起来与此问题完全无关(因为与图像相关的问题会在不同的时间发生).
我们将SQL CE 3.5与单个连接一起使用,该连接与应用程序一起存储在设备上(而不是存储卡).该设备是运行Windows Mobile 6.1的Motorola MC75.
有什么想法吗?
我的应用程序包含一个可执行项目和一个DLL库.我的可执行项目添加了对库项目的引用.
库项目包含一些"内容"文件,如.ini .bmp.问题是,在部署可执行项目时,这些文件不会复制到设备.仅复制dll文件.奇怪的是,所有文件都被复制到桌面计算机上的\ ExecutableProject\bin\Debug目录中.
为了解决这个问题,我将dll项目的部署路径设置为与可执行项目相同,并且我正在部署它们,但是这个解决方案看起来并不好.
我正在使用VS2008,我的设备可以在Windows CE上运行.
deployment compact-framework visual-studio-2008 visual-studio
我正在研究CF.NET的一个小技术框架,我的问题是,我应该如何编写异步部分?在MSDN上阅读很多内容但对我来说并不清楚.
所以,这是代码:
public class A
{
public IAsyncResult BeginExecute(AsyncCallback callback)
{
// What should I put here ?
}
public void EndExecute()
{
// What should I put here ?
}
public void Execute()
{
Thread.Sleep(1000 * 10);
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我......
谢谢 !
我有内存泄漏的问题.
我有这个代码button_click:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim ms As New IO.MemoryStream
Dim bm As New Bitmap("\Application Data\imgs\IMG22.jpg")
bm.Save(ms, Drawing.Imaging.ImageFormat.Jpeg)
End Sub
Run Code Online (Sandbox Code Playgroud)
当我在我的笔记本电脑上运行.exe时,这段代码工作得很好(我的意思是在带有完整.net框架的windows7/32bits下)但是当我在装有WindowsMobile 6.1的设备上运行应用程序时,应用程序会抛出此异常:
SmartDeviceProject22.exe
OutOfMemoryException
Run Code Online (Sandbox Code Playgroud)
在
Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)
at
System.Drawing.Image.Save(Stream stream, ImageFormat format)
at
SmartDeviceProject22.Form1.Button3_Click(Object sender, EventArgs e)
at
....
Run Code Online (Sandbox Code Playgroud)
图像大小约为200kb,宽度和高度约为1500px.图片细节:
任何帮助,将非常感激.
我尝试@asawyer的代码甚至删除所有的代码,引用等问题保持,我想这是关于图像的宽度/高度或紧凑的框架.
还有其他建议吗?
问题的解决方案和解释 在测试完成后,真正的问题不是内存泄漏,正如@pdriegen所说的内存问题一样.
我将我的代码更改为此(并在移动设备上测试):
Dim fs As IO.FileStream = IO.File.OpenRead("\Application Data\ryder\IMG23.jpg")
Dim arrb(fs.Length) As Byte
fs.Read(arrb, 0, arrb.Length)
fs.Close()
fs.Dispose() …Run Code Online (Sandbox Code Playgroud) 遗留代码以这种方式执行:
public bool isValidField(string tableName, string fieldName)
{
bool retVal;
string tblQuery = string.Format("SELECT {0} FROM {1}", fieldName, tableName);
checkConnection();
try
{
SqlCeCommand cmd = objCon.CreateCommand();
cmd.CommandText = tblQuery;
object objvalid = cmd.ExecuteScalar();
retVal = (null != objvalid);
}
catch
{
retVal = false;
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
...但我发现它并不总是有效.调用该方法后,获取false,一些代码ALTERS表添加一些列,但我得到:
列ID在规范中出现多次.
我在StackOverflow上找到了几个有前途的SQL语句:
if exists(select * from sys.columns
where Name = N'columnName' and Object_ID = Object_ID(N'tableName'))
Run Code Online (Sandbox Code Playgroud)
和
IF COL_LENGTH('table_name','column_name') IS NULL
Run Code Online (Sandbox Code Playgroud)
...但我不确定如何在C#/ .NET 1.1中实现它
我是否需要使用ExecuteScalar并将返回的值转换为bool?或者是其他东西?
改变它并没有纠正问题:
public bool isValidField(string …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
windows-ce ×2
asynchronous ×1
bitmap ×1
datagrid ×1
deployment ×1
image ×1
memory-leaks ×1
nunit ×1
opennetcf ×1
sql ×1
unit-testing ×1