我一直在研究这段似乎微不足道的小代码,但我仍然无法确定问题出在哪里.我的功能很简单.打开文件,复制其内容,替换内部的字符串并将其复制回原始文件(然后在文本文件中进行简单的搜索和替换).我真的不知道怎么做,因为我在原始文件中添加了行,所以我只创建了一个文件副本,(file.temp)副本也备份(file.temp)然后删除原始文件(文件)并将file.temp复制到文件.我在删除文件时遇到异常.以下是示例代码:
private static bool modifyFile(FileInfo file, string extractedMethod, string modifiedMethod)
{
Boolean result = false;
FileStream fs = new FileStream(file.FullName + ".tmp", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
StreamReader streamreader = file.OpenText();
String originalPath = file.FullName;
string input = streamreader.ReadToEnd();
Console.WriteLine("input : {0}", input);
String tempString = input.Replace(extractedMethod, modifiedMethod);
Console.WriteLine("replaced String {0}", tempString);
try
{
sw.Write(tempString);
sw.Flush();
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
streamreader.Close();
streamreader.Dispose();
File.Copy(originalPath, originalPath + ".old", true);
FileInfo newFile = new FileInfo(originalPath + ".tmp");
File.Delete(originalPath);
File.Copy(fs., originalPath, true); …Run Code Online (Sandbox Code Playgroud) 我有两个ActiveMQ代理(A和B)配置为存储转发网络.当代理B连接消费者并且生产者向A发送消息时,它们完美地将消息从A转发到B.问题是当消费者被杀死并重新连接到A时,B上排队的消息(它们是从A)不会转发回消费者所连接的A.即使我向B发送新消息,所有消息都被卡在B上,直到我重新启动经纪人.我试图在代理网络连接器上设置networkTTL ="4"和duplex ="true",但它不起作用.
我正在构建一个通知框架,为此我将序列化和反序列化一个基本类,我想要发送的所有类都将从中派生.
问题是代码编译,但当我实际尝试序列化这个基本类时,我得到一个错误说
System.Runtime.Serialization.SerializationException:在Assembly'Xxx.DataContract中键入'Xxx.DataContracts.WQAllocationUpdate',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未标记为可序列化.
这是代码:
public class WCallUpdate : NotificationData
{
private string m_from = "";
[DataMember]
public string From
{
get { return m_from; }
set { m_from = value; }
}
private WCall m_wCall = new WCall();
[DataMember]
public WCall Call
{
get { return m_wCall; }
set { m_wCall = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
在DataContract对通知如下:
/// <summary>
/// Basic class used in the notification service
/// </summary>
[DataContract]
public class …Run Code Online (Sandbox Code Playgroud) 我知道必须从事件中取消订阅.我的问题来自于生成的代码:当您修改从VS编辑器的用户界面,并添加事件处理程序的UI元素(例如:
private void BtnSampleClick(object sender, EventArgs e))
在创建此事件处理时,VS会在private void InitializeComponent()自动生成的代码中添加此代码
this.btnSample.Click += new System.EventHandler(this.BtnSampleClick);
Run Code Online (Sandbox Code Playgroud)
问题是VS不会this.btnSample.Click -= new System.EventHandler(this.BtnSampleClick);在表单的Dispose方法中自动添加unsubscription().
通常我们应该在那里添加它们吗?如果不是这会泄漏到内存泄漏?想要检查VS是否有自动执行取消订阅的原因.即使我们不这样做,表格也可以正确处理?
谢谢你帮助我在这件事上轻描淡写!
我正在为我的一个项目实现一个通知框架.由于我希望它非常通用,用户可以使用多个传输层,因此他并不需要关心使用一种传递方法(比如说WCF)或另一种传递方法(例如ActiveMQ).用户可以访问的界面当然与传递方法(WCF或ActiveMQ)无关.尽管如此,这两个类(消费者和生产者)实现了单例,因此它们实际上使用默认构造函数(意思是没有参数).我的问题是,我想有一个参数,用户想要使用的交付方法.但据我所知,单身人士只使用默认构造函数?这是正常的,因为没有必要使用带参数的单例.那么,我的选择是什么?不要创建一个单身人士?创建一个设置交付方式的方法?
塞巴斯蒂安
我是新手使用Moq而我找不到这样做的方法.我有一个generateId私有方法,叫做
/// <summary>
/// Generates a call Id for external interfaces
/// </summary>
/// <returns></returns>
private string GenerateCallId()
{
return "EX" + SharedServicesClientProxy.Instance.GenerateId().ToString();
}
Run Code Online (Sandbox Code Playgroud)
我想对这个方法进行单元测试,因此我需要模拟代理.SharedServicesClientProxy只是一个实现接口ISharedServices但添加单例的对象.我想测试所有字符串是否正确返回以"EX"开头的字符串.这是我的单元测试,使用Moq
/// <summary>
/// A test for GenerateCallId
/// A CallId for external systems should always start by "EX"
///</summary>
[TestMethod()]
[DeploymentItem("myDll.dll")]
public void GenerateCallIdTest()
{
myService_Accessor target = new myService_Accessor();
var SharedServicesClientProxy = new Mock<ISharedServices>();
SharedServicesClientProxy.Setup(x => x.GenerateId()).Returns(5396760556432785286);
string actual;
string extCallIdPrefix = "EX";
actual = target.GenerateCallId();
Assert.IsTrue(actual.StartsWith(extCallIdPrefix));
}
Run Code Online (Sandbox Code Playgroud)
我想我在错误的地方做我的模拟?
以更一般的方式,我如何模拟将要通过我正在测试的方法调用的对象?例如:
/// <summary>
/// dummy …Run Code Online (Sandbox Code Playgroud) 我想要实现一个相对简单的东西:我想在给定ID范围的情况下从模型中检索所有对象(例如,从书的章节中检索第5至10行)。
现在在我的views.py中,我已经:
def line_range(request, book_id, chapter_id, line_start, line_end):
book_name = get_object_or_404(Book, id = book_id)
chapter_lines = []
for i in range (int(line_start), int(line_end)+1):
chapter_lines .append(Line.objects.get(book = book_id, chapter = chapter_id, line = i))
return render_to_response('app/book.html', {'bookTitle': book_name, 'lines': chapter_lines })
Run Code Online (Sandbox Code Playgroud)
现在,这显然不是最优化的处理方式,因为它只能在一个数据库中完成n次数据库查询。有没有办法做类似的事情:
def line_range(request, book_id, chapter_id, line_start, line_end):
book_name = get_object_or_404(Book, id = book_id)
lines_range = range (int(line_start), int(line_end)+1)
chapter_lines = get_list_or_404(Line, book = book_id, chapter = chapter_id, line = lines_range)
return render_to_response('app/book.html', {'bookTitle': book_name, 'lines': chapter_lines })
Run Code Online (Sandbox Code Playgroud)
从理论上讲,这将生成更好的数据库查询(用1代替n),并且应该在性能上更好。当然,此语法不起作用(期望整数,而不是列表)。
谢谢!
c# ×5
django ×1
events ×1
failover ×1
file-io ×1
io ×1
ioexception ×1
moq ×1
singleton ×1
unit-testing ×1