os.File
のモックを作成しようとしています。具体的にはio.Reader
です。私は実際の読書なしに128ビットの具体的なデータの読みをエミュレートしたい。uint32の配列をバイトのスライスに書き込み、それを取得します。
単一のuint32
で問題はありません。
モック:
func (f *FileMock) Read(buf []byte) (n int, err error) {
binary.BigEndian.PutUint32(buf, uint32(2052))
return len(buf), nil
}
テスト済みの方法(簡体字):それは最初からスライスに書き込むため
b := make([]byte, 128)
meta_data := make([]uint32, 4)
_, err = s.Read(b)
if err != nil {
// Handle error
}
binary.Read(bytes.NewBuffer(b), binary.BigEndian, &meta_data)
log.Print(meta_data) // Output [2052 0 0 0]
しかし、私はuint32
スライスPutUint32
の読み取りをモックする必要があります(役に立ちません以前に作成されたデータを上書きする)。私はbytes
とbinary
ツールの組み合わせを試しましたが、バイトからデータを戻すことができないたびに幸運はありませんでした。私は空のスライス[0, 0, 0, 0]
を取得しています上記と同様のテスト方法で
func (f *FileMock) Read(b []byte) (n int, err error) {
buf := bytes.NewBuffer(make([]byte, len(b)))
err = binary.Write(buf, binary.BigEndian, [4]uint32{2051, 123, 28, 28})
buf.Read(b)
return len(b), nil
}
:私の最後の試みは、(それがないだけです)があります。 これはos.File.Read
メソッドのモックであるため、既存のスライスにデータを書き込む必要はなく、新しいスライスのバイトを作成することはできません。
まず、この問題を解決する方法が不思議です。また、ちょうど[0, 0, 0, 0]
がある理由を知りたいですか?
回答に感謝します!
スライスを使用すると、BUFへの書き込みを試みた、基礎となる配列を共有しますbuf [4:]など? –
@FranckJeannin、私は多くのことを試しました...私は今それを試してみましょう。 –
@FranckJeannin、まあまあです!私は間違いを見つけました。私は、バイトではないビットに関するインデックスを渡すべきだと思ったので、 'buf [32:]'は 'buf [4:]'ではありませんでした。ありがとうございました!私はそれを受け入れる答えとしてあなたのコメントを入れてください;) –