私はPex
で遊んでいて、簡単なクラスを持っています。コードは次のとおりです。ペックスとユニコードエンコード
public void WriteLine(string line)
{
Contract.Requires(line != null);
if (_stream == null)
_stream = getStream();
var writer = new StreamWriter(_stream);
writer.WriteLine(line);
}
private Stream getStream()
{
return File.Open(Path, FileMode.Append, FileAccess.Write);
}
私は、次のPexMethod
を作成しました:奇妙なことは、すぐにスタックの葉のように、ある
[TestMethod]
[PexGeneratedBy(typeof(FileWriterTest))]
[PexRaisedException(typeof(PexAssertFailedException))]
[HostType("Moles")]
public void WriteLineThrowsPexAssertFailedException25()
{
this.WriteLine("\udc00");
}
:
[PexMethod(MaxRunsWithoutNewTests = 200)]
public void WriteLine(string line)
{
var ms = new MemoryStream();
MFile.BehaveAsNotImplemented();
MFileStream.BehaveAsNotImplemented();
MStreamWriter.BehaveAsNotImplemented();
MFile.OpenStringFileModeFileAccess = (p, m, a) => new FileStream(p, m);
MFileStream.ConstructorStringFileMode = (s, p, m) => new StreamWriter(ms);
MStreamWriter.AllInstances.BaseStreamGet = sw => ms;
MStreamWriter.ConstructorStream = (sw, s) =>
{
;
};
MTextWriter.AllInstances.WriteLineString = (tw, l) =>
{
var buf = Encoding.Unicode.GetBytes(line);
ms.Write(buf, 0, buf.Length);
};
var path = "C:\test.txt";
var target = new FileWriter(path);
target.WriteLine(line);
var buffer = ms.ToArray();
var result = Encoding.Unicode.GetString(buffer);
PexAssert.AreEqual<string>(line, result);
}
Pex Exploration
は、このユニットテストを思い付いユニットテストをudc00で行い、パラメータ化されたテストに入ると、param Lineは ' 'で表されます。
ご覧のとおり、私はすべてのバッファリングをUnicodeでやっています。私が最後にメモリストリームから文字列を読み込もうとすると、内部に疑問符がついたダイヤモンドのような奇妙なシンボルができます。私が手
ありエラーは、次のとおりです。「PexAssertFailedException」「期待 『奇妙な記号が』、 『だ』」
、誰もが何が起こっているのか知っていますか?
Pexの調査でサロゲートペアの提案と使用を停止するにはどうすればよいですか? – Chris
私は知らない。 –
このshoudの仕事:PexAssume.IsFalse(stringVariable.ToCharArray().Any(c => char.IsSurrogatePair()); – Chris