### Question:
SpanBuilderSdk implements Span.Builder { @Override public Span.Builder setAttribute(String key, String value) { return setAttribute(stringKey(key), value); } SpanBuilderSdk(
      String spanName,
      InstrumentationLibraryInfo instrumentationLibraryInfo,
      SpanProcessor spanProcessor,
      TraceConfig traceConfig,
      Resource resource,
      IdsGenerator idsGenerator,
      Clock clock); @Override Span.Builder setParent(Context context); @Override Span.Builder setNoParent(); @Override Span.Builder setSpanKind(Kind spanKind); @Override Span.Builder addLink(SpanContext spanContext); @Override Span.Builder addLink(SpanContext spanContext, Attributes attributes); @Override Span.Builder setAttribute(String key, String value); @Override Span.Builder setAttribute(String key, long value); @Override Span.Builder setAttribute(String key, double value); @Override Span.Builder setAttribute(String key, boolean value); @Override Span.Builder setAttribute(AttributeKey<T> key, T value); @Override Span.Builder setStartTimestamp(long startTimestamp); @Override Span startSpan();  }### Answer:
@Test void setAttribute() { Span.Builder spanBuilder = tracerSdk .spanBuilder(SPAN_NAME) .setAttribute("string", "value") .setAttribute("long", 12345L) .setAttribute("double", .12345) .setAttribute("boolean", true) .setAttribute(stringKey("stringAttribute"), "attrvalue"); RecordEventsReadableSpan span = (RecordEventsReadableSpan) spanBuilder.startSpan(); try { SpanData spanData = span.toSpanData(); ReadableAttributes attrs = spanData.getAttributes(); assertThat(attrs.size()).isEqualTo(5); assertThat(attrs.get(stringKey("string"))).isEqualTo("value"); assertThat(attrs.get(longKey("long"))).isEqualTo(12345L); assertThat(attrs.get(doubleKey("double"))).isEqualTo(0.12345); assertThat(attrs.get(booleanKey("boolean"))).isEqualTo(true); assertThat(attrs.get(stringKey("stringAttribute"))).isEqualTo("attrvalue"); assertThat(spanData.getTotalAttributeCount()).isEqualTo(5); } finally { span.end(); } }